/* !!! Error checking is omited for brevity !!! */
/* Create a streaming socket */
int sock = socket(AF_INET, SOCK_STREAM, 0);
/* Get the file descriptor flag */
int flags = fcntl(sock, F_GETFL, 0);
/* Set O_NONBLOCK if it is set
* or unset it if it is not
*/
if ((flags & O_NONBLOCK ) == O_NONBLOCK) {
fcntl(sock, F_SETFL, flags | O_NONBLOCK); /* Set */
} else {
fcntl(sock, F_SETFL, flags & (~O_NONBLOCK)); /* Unset */
}
Sunday, March 20, 2011
Socket and O_NONBLOCK
It is often stated that a socket is created in blocking mode by default. However, not all implementations of the socket calls adhere to that behavior. Specialized operating systems can be particularly tricky when it comes to blocking and non-blocking mode . One should always test the O_NONBLOCK flag on a socket to be sure if it is in the blocking or nonblocking mode operation before proceeding to send/recv. Here are some example c code to demonstrate how to check and manipulate the O_NONBLOCK flag on a streaming socket.
Labels:
Linux,
System Programming
Subscribe to:
Post Comments (Atom)
Really nice site! The platform simplifies the process in a smart way. The personalized suggestions make decision-making much easier. universities in Germany.
ReplyDeleteVery helpful post. The platform makes the entire process feel more organized and clear.
ReplyDeleteIt reduces unnecessary confusion and keeps things simple free education countries for indian students.
coconut mct powder supplier
ReplyDeletecoconut mct oil supplier