On Dec 3, 2011, at 5:54 AM, jyl_2006 wrote:

> First, I use the return value of sctp_connectx, and I do not use errno, so
> the return value does not match the errors gived in manual. Now,I know it is
> my mistake.
> 
> However, I write a simple program to test sctp_connectx, it still show
> error.The errno is "EINVAL", I am sure that the paraments are set properly.
> 
> One more thing, I also test these programs in other platform, the result is
> OK, but under FreeBSD, it does not work.
In BSD you need to set the sin_len field of the sockaddr_in structure.
So if you add
        server_ipaddress . sin_len = sizeof(struct sockaddr_in);
the client works (at least it does for me).
You should do the same for the server...

Please let me know if your problem persists.

Best regards
Michael
> 
> /*Here are programs.*/
> 
> #include <sys/errno.h>
> #include <stdio.h>
> #include <string.h>
> 
> #include <netinet/in.h>
> #include <netinet/sctp.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #define PORT 63000
> #define MTU  1500
> 
> int main()
> {
>       int _listenfd, _sctp_socket, _connfd;
>       struct sockaddr_in servaddr;
>       int ret, msg_flag;
>       char message[MTU];
>       struct sctp_sndrcvinfo sndrcvinfo;
>       
>       _sctp_socket = socket( AF_INET , SOCK_SEQPACKET , IPPROTO_SCTP );
> 
>       bzero( (void *)&servaddr, sizeof(servaddr) );
>       servaddr.sin_family = AF_INET;
>       servaddr.sin_addr.s_addr = htonl( INADDR_ANY );
>       servaddr.sin_port = htons(PORT);
> 
>       ret = bind(_sctp_socket, (struct sockaddr *)&servaddr, 
> sizeof(servaddr));
>       if( ret )
>       {
>               printf("Server bind error" );
>       }
> 
>       _listenfd= listen(_sctp_socket, 10);
>       if(0 != _listenfd)
>       {
>               printf("Server listen error" );
>       }
> 
>       ret = sctp_recvmsg(_sctp_socket, (void *)message , MTU, NULL, 0 ,
> &sndrcvinfo , &msg_flag);
>       if(ret >= 0)
>       {
>               printf("Receive message:%s", message);
>       }
> }
>       
> 
> #include <sys/errno.h>
> #include <stdio.h>
> #include <string.h>
> 
> #include <netinet/in.h>
> #include <netinet/sctp.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #define PORT 63000
> 
> int main()
> {
>       int _sctp_socket, _sctp_associd, ret;
>       _sctp_socket = socket( AF_INET , SOCK_SEQPACKET , IPPROTO_SCTP );
> 
>       struct sockaddr_in server_ipaddress;
>       server_ipaddress . sin_family = AF_INET;
>       server_ipaddress . sin_port = htons(PORT);
>       server_ipaddress . sin_addr.s_addr = inet_addr("127.0.0.1");
> 
>       ret = sctp_connectx(_sctp_socket , (struct sockaddr*) &server_ipaddress 
> ,
> 1, &_sctp_associd);
>        if( ret < 0)
>        {
>               printf("sctp_connectx error");
>        }
> }
>       
>       
> 
>       
> 
> 
> --
> View this message in context: 
> http://freebsd.1045724.n5.nabble.com/the-return-value-of-sctp-connectx-do-not-match-any-error-tp5041952p5043901.html
> Sent from the freebsd-net mailing list archive at Nabble.com.
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"
> 

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to