Exemple d'initialisation pour Linux peut ressembler à ceci:
int flags;
s = socket(PF_INET, SOCK_STREAM, IPPROTO_IP) // ret 5
setsockopt(s, SOL_TCP, TCP_NODELAY, [1], 4)
setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, [1], 4)
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, [1], 4)
flags = fcntl(s,F_GETFL,0);
assert(flags != -1);
fcntl(s, F_SETFL, flags | O_NONBLOCK);
connect(s, {sa_family=AF_INET, sin_port=htons(5001), sin_addr=inet_addr("192.168.0.68")}, 16)
Livre blanc de base du soleil:
sun asych net
Sur les fenêtres Vous utilisez prises chevauché IO pour obtenir la mise en réseau non bloquant.
Look here and in MSDN how to write code with OVERLAPPED structures
sur l'utilisation de Linux epoll().
Sur la prise solaris().
Sachez lire ou écrire sur une socket lorsqu'elle n'est pas prête. (select-output) Parce que vous pouvez recevoir une erreur EAGAIN.
Grande bibliothèque de plate-forme croisée (mais C++ et nouveau candidat standard C++) est boost :: asio.
Il utilise des méthodes asynchrones du système natif.
boost::asio
Cela ressemble trop aux devoirs. La deuxième question ne peut pas aboutir à un projet réalisable qui nécessiterait deux éléments très disparates de programmation élémentaire d'OS. –
En fait, il est destiné à être utilisé pour ne pas attendre le trafic entrant dans l'environnement en ligne. –