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 : 2022/09/30 15:07 de root