J'ai un programme simple pour vérifier si un port est ouvert, mais je veux raccourcir la longueur du délai d'attente sur la connexion socket, car la valeur par défaut est beaucoup trop longue. Je ne suis pas sûr de savoir comment faire cela. Voici le code:C: délai de connexion socket
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv) {
u_short port; /* user specified port number */
char addr[1023]; /* will be a copy of the address entered by u */
struct sockaddr_in address; /* the libc network address data structure */
short int sock = -1; /* file descriptor for the network socket */
if (argc != 3) {
fprintf(stderr, "Usage %s <port_num> <address>", argv[0]);
return EXIT_FAILURE;
}
address.sin_addr.s_addr = inet_addr(argv[2]); /* assign the address */
address.sin_port = htons(atoi(argv[2])); /* translate int2port num */
sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sock,(struct sockaddr *)&address,sizeof(address)) == 0) {
printf("%i is open\n", port);
}
close(sock);
return 0;
}
Sur quelle plateforme êtes-vous? – Duck
J'utilise linux –
Vous avez ajouté dans votre réponse "fcntl (chaussette, F_SETFL, O_NONBLOCK)" Notez que, après cela, le prochain socket lu devient également non bloquant! –