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