- From: Thomas Dreibholz <dreibh AT exp-math.uni-essen.de>
- To: "rkgupta" <rkgupta AT mahindrabt.com>
- Cc: <discussion AT sctp.de>
- Subject: Re: [SCTP-Discussion] SCTP Socket API for Release Association
- Date: Thu Mar 28 10:47:01 2002
- List-id: SCTP Discussions <discussion.sctp.de>
- Organization: University of Essen, Institute for Experimental Mathematics
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am Mittwoch, 27. März 2002 05:46 schrieb rkgupta:
>
Hi Thomas,
>
>
I want to use C++ Socket API. I have gone thru tdsocket.h.
>
I have some queries regarding that -
>
>
Is socket class use only one stream id(i/c & o/g) for sending/receving, by
>
default. If yes,how can I
>
change the no of stream ids and pass/use while sending/receiving ??
By default, there is only one stream in each direction. You can modify the
setting *before* binding the socket using the SCTP_INITMSG option. The
following example is copied from socket_programs/sctpterminal.cc
Socket clientSocket(Socket::IP,Socket::Stream,Socket::SCTP);
sctp_initmsg init;
init.sinit_num_ostreams = outstreams; // *** Set number of outgoing
streams ***
init.sinit_max_instreams = instreams; // *** Set max. number of
incoming streams ***
init.sinit_max_attempts = 0;
init.sinit_max_init_timeo = 60;
if(clientSocket.setSocketOption(IPPROTO_SCTP,SCTP_INITMSG,(char*)&init,sizeof(init))
< 0) {
cerr << "ERROR: Unable to set SCTP_INITMSG parameters!" << endl;
exit(1);
}
if(clientSocket.bindx((const SocketAddress**)localAddressArray,
localAddresses,
SCTP_BINDX_ADD_ADDR) == false) {
cerr << "ERROR: Unable to bind socket!" << endl;
exit(1);
}
>
As in the tdsocket.h header file, there are different functions for
>
sending/receiving,which one should I
>
use ??
To send data via a specific stream, you have to use sendMsg() and add a
SCTP_SNDRCV control structure:
SocketMessage<CSpace(sizeof(sctp_sndrcvinfo))> message;
message.setBuffer(toSend,length);
sctp_sndrcvinfo* info =
(sctp_sndrcvinfo*)message.addHeader(sizeof(sctp_sndrcvinfo),IPPROTO_SCTP,SCTP_SNDRCV);
info->sinfo_assoc_id = 0;
info->sinfo_stream = (unsigned short)stream; // *** Set stream
number here!
info->sinfo_flags = 0;
info->sinfo_ppid = ppid;
info->sinfo_timetolive = 0;
const ssize_t result = CopySocket->sendMsg(&message.Header,0);
Using receiveMsg(), you can get the same structure from incoming chunks. See
EchoThread::run() in socket_programs/sctpterminal.cc for an example.
See also socket_programs/sctpmultiserver.cc for more example code. The
options (SCTP_INITMSG, SCTP_SNDRCV and many more) are all defined in the
socket API draft (draft-ietf-tsvwg-sctpsocket-02.txt or a newer version).
Best regards
- --
=======================================================================
Dipl.-Inform. Thomas Dreibholz
Molbachweg 7
D-51674 Wiehl-Forst Mail:
dreibh AT exp-math.uni-essen.de
Germany WWW:
http://www.exp-math.uni-essen.de/~dreibh
=======================================================================
- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: Weitere Infos: siehe
http://www.gnupg.org
mQGiBDr2cOgRBAC71Xhy1yzNTBxnousyxwtZ+zxRQJIfkDUQ8Yry5/rdoRkUldnE
VQUNX9owxKKwA40DsKMX5lfPIgfPpefqnSOx1/XOtjpffkF8+FY8ncU/LKvHPPw3
oNXzFAr8F6NqpJAIbp8eW6DlfraXiJFZk0D6sZyIk9XDqTY01+Dn5WmAewCg4Szj
r52geHYk+6n83yfVqw8+c3MD/A9d4ylhJikTHzbL83HTO7WozqlGtZq0rwGY+JIq
wPAaRAdBnu0brQz7xtfTZrvxA6v3sYb73bpuosaQNtg1K5Z0l0fbJQxls7wCdSC4
GmkXyl64c1bPiGMHu7WVE85mwdm4KyD7qELnnNKZoagFgK1HNYFJtuUDYQ3ihBQq
k0VnBACaqJ4k/VJYPQvuWy0fppX+Ultyqz2rrHqqVvaSotjc8muxwM0OL42ZCjL1
scuFb1TonojymUFa1nqe6uYU5Owjh2CRfs5+TnMUO7S7vXQRQgWPffIE7kJqL46G
S79MmHXVWwmO1WMpJooTlsCUv+J+pAWpYu5nJY4X/s+1DXSA9LQvVGhvbWFzIERy
ZWliaG9seiA8ZHJlaWJoQGV4cC1tYXRoLnVuaS1lc3Nlbi5kZT6IVwQTEQIAFwUC
OvZw6AULBwoDBAMVAwIDFgIBAheAAAoJEN9gW7B2Dy1l6BcAnRhM7hgy3qOLDKps
qIY88XZaMjMqAKDHqpiM/8CFpti9TKeIP/mRbva/3rkCDQQ69nD8EAgApETE6wER
FSA5YMQvoqNPYpf8W3y+u+BJvD2QMdKXFy79XnYCoOB26q0JK5gGw1GTB39ANOpc
3x5dkSNDiJptntB9DX7SEb1V+GU62XZOhju6o4GbLlhRsy40SVvzZ/RldkoYeCRH
1JghU7EkGsn8RcLuRFj7AgW+bWkIyC3NCGZN+mdc/mmRxYqeFpMQv2+Xnb1EuCk6
jqDJL6IjVKueYZD5XtKXW+QAj1UlRo9vGpNLs7oZz3QahEgf0S5Cn9eLp2JRr94D
FVoInZwziOWyEJ8BrJoydDgCAb/5eEdrAc+7ibuPSOnOxVH8ae9zyNbdimSJGDt1
pnfEz/Cw3cYYvwADBwf/bV9iJO22zTJaB5Sz8dzbQfwaa55fugi7DvPOe5eiE1p9
/W+uPJTYZ7WQxarM8q/h8BztwOAfeUKztzoGSVvEfxha8Wnvz/3rLWLK1Ok+v9ZV
ElrAYmJbbEci1Lmk1vXwmjcYoojYl/25mhkvucg8zVO8WfNYCwBUkGUGUj+SQpbf
xEt80dyGm6KFv9XO1fAzlUXkWBODZ4vDPNRY+Ay4evAFkbfKFgHXMUBvtXlGfuSQ
pTRXNt0mfRVZ4OeeIKbPdCI8DX5ND9+cIWEQJ2APgWta+h61kwJ5c7k2xxabbYt6
v9jTzPr57yvVle4fOV6ExUeCcFaRIzvX+87FMoac+YhGBBgRAgAGBQI69nD8AAoJ
EN9gW7B2Dy1lPpwAnR3YQYZRN4WouZwLcGpfMfH2X5RVAKDCa7d6Hwhoa7DrPaTA
P/965IPybA==
=g36Q
- -----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see
http://www.gnupg.org
iD8DBQE8ouVW32BbsHYPLWURAnG3AKCQmcXrrvQdDOwSjQsmcrFfX+5l+gCfTt6e
7L+6AtMTBXslYKTUIJpQN6U=
=ah67
-----END PGP SIGNATURE-----
Archive powered by MHonArc 2.6.19+.