In Linux if we call blocking recv from one thread and close for the same socket from another thread, recv doesn’t exit.
Why?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Check that all file descriptors for the socket have been closed. If any remain open at the “remote end” (assuming this is the one you attempt to close), the “peer has not performed an orderly shutdown“.
If this still doesn’t work, call
shutdown(sock, SHUT_RDWR)on the remote end, this will shut the socket down regardless of reference counts.