tawab@net4.UUCP (08/06/89)
Hi, can somebody out there tell me how to close a socket "quickly". The problem I have is that after talking over a socket, I won't need the socket any more and so I just close it, but it keeps hanging around for about 2-3 min and blocks the queue for new incoming messages. I know that a TCP-socket does something like that. So I tried "shutdown(socket, 2)", but there is no difference. The main body looks like this sock = socket(AF_INET, SOCK_STREAM, 0); server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = xx; ...... and so on setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)0, 0) .... and setsockopt(sock, SOL_SOCKET, SO_DONTLINGER, (char *)0, 0) listen(sock, 5); do { if ((msgsock = accept(sock, 0, 0)) == -1) perror("accept"); else do { bzero(buf, sizeof(buf)); if ((rval = read(msgsock, buf, 1024)) < 0) { perror("reading msgsock"); } if (rval > 0) { /* got message */ doanything_with(buf); } } while (rval != 0); close(msgsock); /* or shutdown(msgsock, 2); no difference */ } while(1); but it doesn't do what I want. to test it I send messages in a loop to the server, (send is the client prog) main() { int i; for (i=0; i<=100; i++) { system("send host text"); sleep(1); /* If I enter this line, it will give the best performance, whith or without the setsockoptions and with or without shutdown(socket,[0-2]) */ } } Is this a bug ? I am uesing BSD 4.2 and SYS V.2. Am I doing something wrong ? can anyone give me a solution/help/hint ? I can't make the client sleep, or is there a systemcall to make a user fall asleep ?? :-) Thanks for any answer. Robin Tawab NIXDORF COMPUTER AG Dep DTSW 2-4 Berliner Str. 95 D-8000 Munic (West Germany) Tel.: xxx-89/3601-3171 eunet: tawab.muc@nixpbe.UUCP !USA: mcvax!unido!nixpbe!tawab.muc USA: uunet!linus!nixbur!tawab.muc