SCTP Discussions

Text archives Help


Re: [SCTP-Discussion] question about SCTP programming


Chronological Thread 
  • From: Michael Tuexen <Michael.Tuexen AT micmac.franken.de>
  • To: Tetu Ou <hu-outetu AT hiroshima-u.ac.jp>
  • Cc: sctp-discussion AT sctp.de
  • Subject: Re: [SCTP-Discussion] question about SCTP programming
  • Date: Tue, 3 Sep 2013 14:37:17 +0200
  • List-archive: <http://lists.franken.de/pipermail/sctp-discussion>
  • List-id: SCTP Discussions <sctp-discussion.sctp.de>

On Sep 3, 2013, at 2:14 PM, Tetu Ou
<hu-outetu AT hiroshima-u.ac.jp>
wrote:

> Dear Mr.Tuexen,
>
> Thank you very much for your reply.
> Compile was OK but when I running the client program(receive
> message),the "Create socket error!"was printed out.
> This is my fully source code of CreateSocket():
> int CreateSocket()
> {
> int in, tempSock, ret, ret_1;
> struct sockaddr_in servaddr, servaddr_1;
> struct sctp_status status;
> //struct sctp_sndrcvinfo sndrcvinfo;
> struct sctp_event_subscribe events;
> struct sctp_initmsg initmsg;
>
> /* Create an SCTP TCP-Style Socket */
> connSock = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
> connSock_1 = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
> if (tempSock < 0 || connSock_1 < 0) {
tempSock is not initialized, so it might be negative.
I guess you mean connSock instead of tempSock.

Best regards
Michael
> printf("Create socket error!\n");
> exit (-1);
> }
>
> /* Specify that a maximum of 5 streams will be available per socket */
> memset(&initmsg, 0, sizeof(initmsg));
> initmsg.sinit_num_ostreams = conf.thread;
> initmsg.sinit_max_instreams = conf.thread;
> initmsg.sinit_max_attempts = 1;
> ret = setsockopt(connSock, IPPROTO_SCTP, SCTP_INITMSG,
> &initmsg, sizeof(initmsg));
> ret_1 = setsockopt(connSock_1, IPPROTO_SCTP, SCTP_INITMSG,
> &initmsg, sizeof(initmsg));
>
> /* Specify the peer endpoint to which we'll connect */
> bzero((void *)&servaddr, sizeof(servaddr));
> servaddr.sin_family = AF_INET;
> servaddr.sin_port = htons(MY_PORT_NUM);
> servaddr.sin_addr.s_addr = inet_addr(conf.ip);
>
> /* Specify the peer endpoint to which we'll connect */
> bzero((void *)&servaddr_1, sizeof(servaddr_1));
> servaddr_1.sin_family = AF_INET;
> servaddr_1.sin_port = htons(MY_PORT_NUM+1);
> servaddr_1.sin_addr.s_addr = inet_addr(conf.ip);
>
> /* Connect to the server */
> ret = connect(connSock, (struct sockaddr *)&servaddr, sizeof(servaddr));
> ret_1 = connect(connSock_1, (struct sockaddr *)&servaddr_1,
> sizeof(servaddr_1));
> if (ret == -1 || ret_1 == -1) {
> perror("Connection failure: ");
> exit (-1);
> }
>
> /* Enable receipt of SCTP Snd/Rcv Data via sctp_recvmsg */
> memset( (void *)&events, 0, sizeof(events) );
> events.sctp_data_io_event = 1;
> ret = setsockopt( connSock, SOL_SCTP, SCTP_EVENTS,
> (const void *)&events, sizeof(events) );
>
> /* Read and emit the status of the Socket (optional step) */
> in = sizeof(status);
> ret = getsockopt( connSock, SOL_SCTP, SCTP_STATUS,
> (void *)&status, (socklen_t *)&in );
>
> printf("assoc id = %d\n", status.sstat_assoc_id );
> printf("state = %d\n", status.sstat_state );
> printf("instrms = %d\n", status.sstat_instrms );
> printf("outstrms = %d\n", status.sstat_outstrms );
>
> return connSock;
> }
>
> Best regards
> Zhe Wang
>
>
>
> 于 2013/09/03 3:58, Michael Tuexen 写道:
>> On Sep 2, 2013, at 4:42 PM, Tetu Ou
>> <hu-outetu AT hiroshima-u.ac.jp>
>> wrote:
>>
>>> Hello,
>>>
>>> I am a new member of this mailing list,and i have a question about SCTP
>>> programming on FreeBSD.
>>> When I compiling my SCTP server/client(send/receive) program,I found an
>>> error like this:
>>> error:
>>> client.c: SOL_SCTP undeclared(first use in this function)...
>>>
>>> But on Linux,it was OK.
>>>
>>> The part of my source code( CreateSocket() ):
>>> /* Enable receipt of SCTP Snd/Rcv Data via sctp_recvmsg */
>>> memset( (void *)&events, 0, sizeof(events) );
>>> events.sctp_data_io_event = 1;
>>> ret = setsockopt( connSock, SOL_SCTP, SCTP_EVENTS,
>>> (const void *)&events, sizeof(events) );
>>>
>>> /* Read and emit the status of the Socket (optional step) */
>>> in = sizeof(status);
>>> ret = getsockopt( connSock, SOL_SCTP, SCTP_STATUS,
>>> (void *)&status, (socklen_t *)&in );
>> On FreeBSD you need to use IPPROTO_SCTP instead of SOL_SCTP.
>>
>> Best regards
>> Michael
>>> I am sorry for my poor english,and I was wondering if it be possible to
>>> ask somebody who can help me.
>>>
>>> Thank you.
>>> Best Regards.
>>>
>>> --
>>> Zhe Wang
>>> Hiroshima University
>>>
>>> _______________________________________________
>>> sctp-discussion mailing list
>>> sctp-discussion AT sctp.de
>>> http://www.sctp.de/mailman/listinfo/sctp-discussion
>>
>>
>> -----
>> 在此邮件中未发现病毒。
>> 检查工具:AVG - www.avg.com
>> 版本:2013.0.3392 / 病毒数据库:3222/6630 - 发布日期:09/02/13
>
>
> --
> Zhe Wang
> Hiroshima University
> Mail:
> hu-outetu AT hiroshima-u.ac.jp
>
>





Archive powered by MHonArc 2.6.19+.

Top of page