Enable/Disable Non-Blocking Mode
Once a socket has been created using the socket() call, it may be set to non-blocking as follows:
#include "sys/ioctl.h" int on =1; int off =0; //Enable non-blocking ioctl (mySocket, FIONBIO, &(on)); //Disable non-blocking ioctl (mySocket, FIONBIO, (char *) &(off));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| ... ... ... FD_ZERO(&read_mask); FD_ZERO(&write_mask); FD_SET(accept_socket, &read_mask); FD_SET(accept_socket, &write_mask); /* handle receiving the packet */ select_return = select(accept_socket, &read_mask, (fd_set *)0, (fd_set *)0, &tv); if (select_return < 0) /* [timeout=0, -1= ERROR] is returned */ { printf ( "recv: select functions returned -1 error value\n" ); } else if (select_return == 0) { printf ( "recv: select functions returned 0 timeout value\n" ); } else { printf ( "recv: select functions returned a positive value\n" ); if (FD_ISSET(accept_socket, &read_mask)) { /* HAND SHAKE AS A START */ rcv_len = recv(accept_socket, myDmsg, MSG_SIZE, 0); if ( rcv_len < 0) { strcpy (myDmsg, "Nothing received" ); isConnected = FALSE; } else if (rcv_len >= 0) { strcpy (myDmsg, "Received something2..." ); } } } /* handle sending the packet */ select_return = select(accept_socket+1, (fd_set *)0, &write_mask, (fd_set *)0, &tv); if (select_return < 0) /* [timeout=0, -1= ERROR] is returned */ { printf ( "send: select functions returned -1 error value\n" ); } else if (select_return == 0) { printf ( "send: select functions returned 0 timeout value\n" ); } else { printf ( "send: select functions returned a positive value\n" ); if ( send(accept_socket, myDmsg, strlen (myDmsg), 0) < 0) { /* an error occurred. Handle it appropriately (TODO) */ } } ... ... |
No comments:
Post a Comment