Прежде всего, я хотел бы сказать, что это другая проблема, чем эта: Схожая, но не та же самая
Мой код выглядит так:
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);`
Я подключаюсь к существующей машине (IP-адрес существует, но сервер не прослушивает порт, к которому я пытаюсь подключиться).
Выбрать всегда возвращает 1. Почему? По словам человека, он должен тайм-аут и вернуть 0.
После этого, когда я пытаюсь что-то записать в сокет, он возвращает -1 / ECONNREFUSED.
Это ожидаемое поведение? Если да, как проверить, что после select () мы подключены?