Articles of sockets

Erreur de liaison (99): impossible d’affecter l’adresse demandée

J’essaie de faire fonctionner le code suivant, mais je reçois l’erreur ci-dessus. Je suis à peu près sûr que l’adresse que je mets est correcte parce que cela fonctionne dans un programme séparé qui effectue une tâche similaire. Cela me porte à croire que je fais une sorte d’erreur stupide, toute aide serait appréciée! /*Create […]

Prise non bloquante accepter sans spinlock en C

Dupliquer possible: Le thread de réveil est bloqué lors de l’appel accept () J’écris un petit serveur qui écoute les connexions (les accepte et les transmet aux threads de travail) jusqu’à ce qu’un signal d’arrêt personnalisé soit envoyé. Si j’utilise des sockets de blocage, ma boucle d’acceptation principale ne peut pas être interrompue lors de […]

Récupération du numéro de port à l’aide de l’API winsock sockets

Bien que j’obtienne une valeur non nulle pour le numéro de port du segment de code ci-dessous, la valeur renvoyée pour le port ne correspond pas à la valeur du port utilisée pour établir le socket: #include int main(void) { SOCKADDR_IN server; WSADATA wsa; SOCKET s; DWORD dwTime = 1000; if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) { […]

Que signifie “lisible / enregistrable” dans un descripteur de fichier de socket? Et pourquoi les fichiers normaux ne se soucient pas de cela?

Depuis que je commence à apprendre libev récemment, il existe un concept lisible / inscriptible dans io_watcher que je ne comprends pas tout à fait. Pour ma connaissance, il existe un paramètre dans la programmation système Linux: O_ASYNC Un signal (SIGIO par défaut) sera généré lorsque le fichier spécifié sera lisible ou inscriptible. Cet indicateur […]

select () sur STDIN et prise entrante

J’essaie d’écrire un client de conversation très basique en C qui communique avec une autre machine à l’aide de sockets, et j’ai quelques problèmes avec la compréhension de select. Voici un extrait du code correspondant. while(1) { FD_ZERO(&readfds); FD_ZERO(&writefds); FD_SET(STDIN, &writefds); FD_SET(connectFD, &readfds); select(connectFD+1, &readfds, &writefds, NULL, NULL); if(FD_ISSET(connectFD, &readfds) != 0) { char buf[1024]; […]

Programmation de sockets C avec CygWin

Bonjour, j’essaye d’écrire un petit programme serveur / client en C en utilisant CygWin, le problème est que le compilateur gcc dans Cygwin ne semble pas contenir les en-têtes standard associés à la programmation par socket. En essayant de comstackr mon programme serveur, je reçois: netinet/in.h: No such file or directory sys/socket.h: No such file […]

SO_SNDBUF et SO_RCVBUF sur des sockets Linux

Je programme une application client-serveur. Simplement, le serveur peut utiliser UDP ou TCP pour chaque client. Je veux que le client TCP et le client UDP impriment la valeur par défaut pour SO_SNDBUF et SO_RCVBUF , mais je suis surpris que j’imprime la valeur par défaut pour sndbuf et rcvbuf avant l’établissement de la connexion, […]

Envoyer des données asn1 du client au serveur avec socket

J’ai écrit ce code dans le client C pour obtenir un numéro int, le coder et l’envoyer via socket int clientNumber; printf(“Enter a number :\n “); scanf(“%d”,&clientNumber); Message01_t *message1; message1 = calloc(1, sizeof(Message01_t)); message1->number= clientNumber; char buffer[BUFFERSIZE]; size_t bufferLen = sizeof(buffer); der_encode_to_buffer(&asn_DEF_Message01, message1, buffer, bufferLen); xer_fprint(stdout, &asn_DEF_Message01, message1); if( send( to_server_socket, &message1, sizeof( message1 ), […]

Sous Linux / Mac / Windows, est-il possible d’accéder à l’horodatage TCP et / ou au RTT dans l’espace utilisateur d’un socket TCP connecté?

Sous Linux / Mac / Windows, est-il possible d’accéder à l’horodatage TCP et / ou au RTT dans l’espace utilisateur d’un socket TCP connecté? Je fais référence à l’horodatage TCP et au calcul RTT associé activé par la RFC 1323 . Évidemment, je pourrais utiliser un socket brut, mais le socket ne serait ni connecté […]

Traitement correct de EWOULDBLOCK avec interrogation sur une socket non bloquante

Je travaille sur un démon TCP d’interrogation depuis un certain temps maintenant. Récemment, j’ai lu que des sockets non bloquants peuvent parfois générer une erreur EWOULDBLOCK lors d’un send () ou d’un recv (). Je crois comprendre que si recv () lance un EWOULDBLOCK, cela signifie (généralement) qu’il n’ya rien à recevoir. Mais ce que […]