> Sorry: 
> I am not sure whether it is the right place
> to ask this question. if not, do please tell me
>  ,where I should ask the question.
> I write a small sctp server program, but when
> build with cc(sunstudio11,cc -g server.c -lnsl
> -lsocket -lsctp) in soalris 10, it always return
> error, but works well when build with /usr/sfw/gcc
>   -g server.c -lnsl -lsocket -lsctp.
> en build with cc, the program keeps saying:
> "sctp_failed: 11:Resource temporarily unavailable"
>      what should I do, as I want to use cc.thanks.
> following is my program:
> #include        <sys/socket.h>  /* basic socket
> definitions */
> #include        <netinet/in.h>  /* sockaddr_in{} and
> other Internet defns */
> #include <errno.h>
> #include        <arpa/inet.h>   /* inet(3) functions
> */
> #include        <netinet/sctp.h> /* note if sctp does
> not exist we blow up :> */
> #include<stdlib.h>
> #include <string.h>
> #include<strings.h>
> #define BUFFSIZE 100
> #define SERV_PORT 8080
> #define SA      struct sockaddr
> 
> int
> main(int argc, char **argv)
> {
>         int             sock_fd, msg_flags;
> char            readbuf[BUFFSIZE];
>         struct sockaddr_in servaddr, cliaddr;
> struct sctp_sndrcvinfo sri;
>         struct sctp_event_subscribe evnts;
> int             stream_increment = 1;
>         socklen_t       len;
> int          rd_sz;
> 
> sock_fd = socket(AF_INET, SOCK_SEQPACKET,
>  IPPROTO_SCTP);
> /      sock_fd = socket(AF_INET, SOCK_STREAM, 0);
>         memset(&servaddr,0, sizeof(servaddr));
> servaddr.sin_family = AF_INET;
> servaddr.sin_addr.s_addr =
>  htonl(INADDR_ANY);
>        servaddr.sin_port = htons(SERV_PORT);
> if(bind(sock_fd, (SA *) & servaddr,
>  sizeof(servaddr))<0)

{
printf("bind failed for:%s\n",strerror(errno));
exit(1);

}
        memset(&evnts,0, sizeof(evnts));
        evnts.sctp_data_io_event = 1;
        if(setsockopt(sock_fd, IPPROTO_SCTP, SCTP_EVENTS,
                   &evnts, sizeof(evnts))<0)
{
printf("setsockopt failed for:%s\n",strerror(errno));
exit(1);
}

        if(listen(sock_fd, 7)<0)
{
printf("listen failed for:%s\n",strerror(errno));
exit(1);
}
        for (;;) {
                len = sizeof(struct sockaddr_in);
                rd_sz = sctp_recvmsg(sock_fd, readbuf, sizeof(readbuf),
                                     (SA *) & cliaddr, &len,
                                     &sri, &msg_flags);
if(rd_sz<=0)
{
        printf("sctp_failed: %d:%s\n",errno, strerror(errno));
continue;
}

readbuf[rd_sz]=0;
printf("received:%s:length=%d\n",readbuf,rd_sz);
                sctp_sendmsg(sock_fd, readbuf, rd_sz,
                             (SA *) & cliaddr, len,
                             sri.sinfo_ppid,
                             sri.sinfo_flags,
                             sri.sinfo_stream,
                     0, 0);
        }
}
-- 
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to