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.
when 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
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code