OSDN Git Service

332052f15992c15650a1e94eb4a677b557b1548f
[linuxcw/linuxcw.git] / linuxcw / almemsys / socket_read.c
1 // socket_read.c
2 // $Id: socket_read.c,v 1.1.1.1 2007/09/19 05:49:54 sendan Exp $
3 // masashi shimakura
4
5 #include<stdio.h>
6 #include<fcntl.h>
7 #include <errno.h>
8 #include <unistd.h>
9
10
11 int socket_read(int sk, char * readdata, int getlen, int interval){
12 struct timeval tv;
13 int retval;
14 int ret;
15 fd_set rfds;
16
17 fcntl(sk, F_SETFL, O_NONBLOCK);
18 tv.tv_sec = interval;
19 tv.tv_usec = 0;
20
21 #ifdef SOCKET_BUG
22 printf("SOCKET: socket_read(1): interval time set %d\n", interval);
23 #endif
24
25 ret = 0;
26
27 // ret = read(sk, readdata, getlen);
28
29 while(1){
30    FD_ZERO(&rfds);
31    FD_SET(sk, &rfds);
32    retval = select(sk + 1, &rfds, NULL, NULL, &tv);
33    if(retval < 0){
34       #ifdef SOCKET_BUG
35       printf("SOCKET: socket_read(2): NG select <%d> ERRNO: %d %s\n",
36         retval, errno, strerror(errno));
37       #endif
38       ret = -1;
39       break;
40       }
41    if(retval == 0){
42       #ifdef SOCKET_BUG
43       printf("SOCKET: socket_read(3): NG select <%d> ERRNO: %d %s\n",
44         retval, errno, strerror(errno));
45       #endif
46       ret = -1;
47       break;
48       }
49    if(retval >= 1){
50       ret = read(sk, readdata, getlen);
51       #ifdef SOCKET_BUG
52       printf("SOCKET: socket_read(4): NG select <%d> ERRNO: %d %s\n",
53         retval, errno, strerror(errno));
54       #endif
55       break;
56       }
57    } /* while */
58
59
60 fcntl(sk, F_SETFL, 0);
61
62 return(ret);
63 }
64
65
66