4

I've written a C code which creates a socket and it works fine so far. In the RFC for TCP i found out that it is possible to send a FIN flag to tell the other host that i want to quit or conversation. The FIN flag does not mean that the other host isn't able to send more data. So in a perfect world i would send the FIN Flag and the other host knows that i dont want to talk anymore he sends the rest of data and shuts down after that. But how can i send the FIN??? The close() function does that for me or better set the linux kernel does when he puts away the resource. But putting away the resource means that i cant use the recv() function anymore because the file descriptor was put away by the kernel when i called the close() function. So how is it possible to read the rest of data that the other host may wants to send after my FIN flag. I bet there is a clean solution

1 Answers1

6

You want to shutdown your write-side of the socket with shutdown(s, SHUT_WR).

The shutdown() call causes all or part of a full-duplex connection on the socket associated with sockfd to be shut down. If how is SHUT_RD, further receptions will be disallowed. If how is SHUT_WR, further transmissions will be disallowed. If how is SHUT_RDWR, further receptions and transmissions will be disallowed.

See also:

Jonathon Reinhart
  • 132,704
  • 33
  • 254
  • 328