non socket socket select devuelve 1 después de conectar

En primer lugar, me gustaría decir que este es otro problema que este: Similar pero no es lo mismo

Mi código se ve así:

struct addrinfo hints, *res;
struct sockaddr* serveraddr;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

int res2 = getaddrinfo(ip, port, &hints, &res);
printf("getaddrinfo() res: %d, %d\n", res2, errno);

serveraddr = res->ai_addr;

//create new socket

int soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
printf("socket() res: %d, %d\n", socket, errno);

//set nonblocking mode
unsigned long on = 1;
res2 = ioctl(soc, FIONBIO, &on);
printf("ioctl() res: %d\n, %d", res2, errno);

res2 = connect(soc, serveraddr, sizeof(struct sockaddr));
printf("connect() res: %d, %d\n", res2, errno);

//check if socket is ready
fd_set wfds;
FD_ZERO(&wfds);
FD_SET(soc, &wfds);

struct timeval t;
t.tv_sec=15;
t.tv_usec=0;

res2 = select(soc + 1, 0, &wfds, 0, &t);
printf("select() res: %d, %d\n", res2, errno);`

Me estoy conectando a la máquina que existe (la dirección IP existe, pero no hay ningún servidor escuchando en el puerto que estoy tratando de conectar).

Select siempre devuelve 1. ¿Por qué? Según el hombre, debería agotar el tiempo de espera y devolver 0. Después de esto, cuando intento escribir algo en el socket, devuelve -1 / ECONNREFUSED.

¿Es este comportamiento esperado? En caso afirmativo, ¿cómo verificar después de seleccionar () si estamos conectados?

Respuestas a la pregunta(4)

Su respuesta a la pregunta