Tengo un programa simple para verificar si un puerto está abierto, pero quiero acortar la longitud de tiempo de espera en la conexión de socket porque el valor predeterminado es demasiado largo. Aunque no estoy seguro de cómo hacerlo. Aquí está el código:C: tiempo de espera de conexión de 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;
}
¿En qué plataforma estás? – Duck
Estoy usando linux –
Agregaste en tu respuesta "fcntl (calcetín, F_SETFL, O_NONBLOCK)" ¡Ten en cuenta que después de esto, la próxima lectura del zócalo también se convierte en no bloqueante! –