lang:c:net:client_serveur
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| lang:c:net:client_serveur [2022/09/30 15:07] – Ajout de "sendmsg/recvmsg" root | lang:c:net:client_serveur [2023/01/27 15:35] (Version actuelle) – [connect sous Windows] : ajout d'une source root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| =====TCP===== | =====TCP===== | ||
| - | ====send/ | + | ====connect sous Windows==== |
| + | |||
| + | Pour ne pas avoir de connect bloquant et maitriser le timeout, on peut utiliser le code suivant : | ||
| + | |||
| + | <code c> | ||
| + | int error = -1; | ||
| + | int len = sizeof(int); | ||
| + | timeval tm; | ||
| + | fd_set set; | ||
| + | unsigned long ul = 1; | ||
| + | ioctlsocket(Socket, | ||
| + | bool ret = false; | ||
| + | if (connect(Socket, | ||
| + | sizeof(ServerAddress)) == -1) { | ||
| + | tm.tv_sec = 10; // set the timeout. 10s | ||
| + | tm.tv_usec = 0; | ||
| + | FD_ZERO(& | ||
| + | FD_SET(Socket, | ||
| + | |||
| + | if (select(Socket + 1, NULL, &set, NULL, &tm) > 0) { | ||
| + | getsockopt(Socket, | ||
| + | / | ||
| + | if (error == 0) | ||
| + | ret = true; | ||
| + | else | ||
| + | ret = false; | ||
| + | } else | ||
| + | ret = false; | ||
| + | } else | ||
| + | ret = true; | ||
| + | |||
| + | ul = 0; | ||
| + | ioctlsocket(Socket, | ||
| + | if (!ret) { | ||
| + | closesocket(Socket); | ||
| + | fprintf(stderr, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | ====send/ | ||
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| Ligne 187: | Ligne 227: | ||
| </ | </ | ||
| - | ====sendmsg/ | + | ====sendmsg/ |
| Transfert d'un file descripteur via socket Unix. | Transfert d'un file descripteur via socket Unix. | ||
lang/c/net/client_serveur.1664543240.txt.gz · Dernière modification : de root
