I have a blocking socket (at least it appears in the following code):
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { ERROR("%s: error opening socket", __func__); return (RESP_ERROR); } t.tv_sec = timeout; t.tv_usec = 0; int rf = fcntl(sock, F_GETFD); ERROR("fcntl ret=%d, ret & O_NONBLOCK = %d", rf, rf & O_NONBLOCK); if ((setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof (t)) < 0) || (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&t, sizeof (t)))) { strerror_r(errno, err, 254); ERROR("%s: error on setsockopt -> %s", __func__, err); close(sock); return (RESP_ERROR); } rf = fcntl(sock, F_GETFD); ERROR("after select fcntl ret=%d, ret & O_NONBLOCK = %d", rf, rf & O_NONBLOCK); if (connect(sock, (struct sockaddr *)&dst, sizeof (dst)) != 0) { strerror_r(errno, err, 254); ERROR("%s: error on connect -> %s", __func__, err); close(sock); return (RESP_ERROR); }
And this is from the magazine:
March 6, 10:42:04 tcpclient: fcntl ret = 0, ret and O_NONBLOCK = 0
March 6, 10:42:04 tcpclient: after selecting fcntl ret = 0, ret and O_NONBLOCK = 0
March 6, 10:42:14 tcpclient: authenticate: error on connect -> Operation in progress
This seems to be a blocking socket, but returns an error typical of non-blocking? Linux - 2.6.18-308.el5. Any ideas?