Reputation: 251
Is it possible to have multiple sockets, which can either by TCP or UDP in one program?
For example: SocketOne: TCP socket at port 4567; socketTwo: TCP socket at port 8765; socketThree: UDP socket at 7643.
The families will be AF_INET, and addresses will be INADDR_ANY for each.
I bind and listen for TCP, and just bind for UDP.
What makes me doubt being about to do this is, how do I wait for a client at each socket together.
I know that the code below won't work, but I don't know what else, or how to, explain what I'm trying to say.
while (1)
{
connected = accept(socketOne, (struct sockaddr *)&client_addr,&sin_size);
connected = accept(socketTwo, (struct sockaddr *)&client_addr,&sin_size);
bytes_read = recvfrom(socketThree,recv_data,1024,0,(struct sockaddr *)&client_addr, &addr_len);
}
Upvotes: 3
Views: 5556
Reputation: 76640
You need the select
function: http://linux.die.net/man/2/select
More user-friendly: http://beej.us/guide/bgnet/html/single/bgnet.html#select
Upvotes: 5
Reputation: 28872
There are a few real world examples of this. FTP has a control and data port which both use TCP and multimedia applications will use SIP or RTSP connections for control (TCP) and mulitple RTP and RTCP port (UDP) for each data stream received.
select or poll are used on unix and on Windows there are the OVERLAPPED apis to do this non-preemptively . Alternatively, this can be done with multiple threads.
Upvotes: 1