Sockets multiples pour que les clients se connectent

Est-il possible d’avoir plusieurs sockets, qui peuvent soit par TCP ou UDP dans un programme?

Par exemple: SocketOne: socket TCP sur le port 4567; socketTwo: socket TCP sur le port 8765; socketThree: socket UDP à 7643.

Les familles seront AF_INET et les adresses seront INADDR_ANY pour chacune.

Je lie et écoute pour TCP, et juste pour UDP.

Ce qui me fait douter d’être sur le sharepoint faire cela est, comment puis-je attendre un client à chaque socket ensemble.

Je sais que le code ci-dessous ne fonctionnera pas, mais je ne sais pas quoi d’autre ni comment expliquer ce que j’essaie de dire.

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); } 

Vous avez besoin de la fonction select : http://linux.die.net/man/2/select

Plus convivial: http://beej.us/guide/bgnet/html/single/bgnet.html#select

homme sélectionnez .

Il existe quelques exemples concrets de cela. FTP possède un port de contrôle et de données qui utilise à la fois TCP et les applications multimédia utilisent des connexions SIP ou RTSP pour le contrôle (TCP) et plusieurs ports RTP et RTCP (UDP) pour chaque stream de données reçu.

select ou poll sont utilisés sous unix et sous Windows, il existe les apis OVERLAPPED pour le faire de manière non préemptive. Alternativement, cela peut être fait avec plusieurs threads.