rww@esl.ESL.COM (Rich Webb) (02/07/90)
Howdy Wizards, Yet another socket question to brighten your day! I am working on a network of Suns (OS4.0.3) and I am having some trouble using non-blocking sockets. I am using select(2) to detect pending input or output capability on a large number of sockets simultaneously. I have most of this working: new input is detected, new sockets are established whenever anyone tries to connect to my "listening" port, and I am notified when I can write out data on a socket. All of my sockets are marked as FNDELAY. My problem is when I am trying to connect(2) to a remote system. I create the socket (socket(2)), I call fcntl(2) with FNDELAY, then I call connect(2) with the socket and "server" loaded with the destination host address. I get EINPROGRESS as expected, then add this socket to my list of write file descriptors that I select(2) for. I actually get notified correctly if the connection succeeds (I try to connect again on this socket and get EISCONN). But select(2) also notifies me if the connection fails (almost immediately, no apparent timeout, trying to connect(2) again gives EINVAL). Shouldn't I be informed of the cause of the failed connection? How can I find out why it failed? The machines are adjacent on a sparsely utilized Ethernet, so maybe TCP is determining that the destination machine/port pair is not active and so TCP closes the connection (if I do a blocking connect(2), I get ECONNREFUSED). Can I determine this type of failure directly, or must I infer it? Can I have the connect(2) request remain active for a certain period of time? Thanks for any input you can provide. I looked through some TCP/IP networking books and the Introductory BSD 4.3 IPC Tutorial and the Advanced BSD 4.3 IPC Tutorial. FNDELAY is mentioned, even in the context of connect(2) and select(2), but no mention is made of error detection and recovery. ("And at these prices, I'm not surprised!") Anyway, I will summarize if there are any interesting responses. Thanks again. -- Richard W. Webb ESL Inc. MS/302 495 Java Drive (408) 738-2888 x5729 Sunnyvale, CA 94088 EMAIL: rww@esl.ESL.COM, ames!esl!rww