OSDN Git Service

addid library source 20140221
[zither/ds-zither.git] / libms / 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 #include <sys/select.h>
10
11
12 int socket_read(int sk, char * readdata, int getlen, int interval){
13 struct timeval tv;
14 int retval;
15 int ret;
16 fd_set rfds;
17
18 fcntl(sk, F_SETFL, O_NONBLOCK);
19 tv.tv_sec = interval;
20 tv.tv_usec = 0;
21
22 #ifdef SOCKET_BUG
23 printf("SOCKET: socket_read(1): interval time set %d\n", interval);
24 #endif
25
26 ret = 0;
27
28 // ret = read(sk, readdata, getlen);
29
30 while(1){
31    FD_ZERO(&rfds);
32    FD_SET(sk, &rfds);
33    retval = select(sk + 1, &rfds, NULL, NULL, &tv);
34    if(retval < 0){
35       #ifdef SOCKET_BUG
36       printf("SOCKET: socket_read(2): NG select <%d> ERRNO: %d %s\n",
37         retval, errno, strerror(errno));
38       #endif
39       ret = -1;
40       break;
41       }
42    if(retval == 0){
43       #ifdef SOCKET_BUG
44       printf("SOCKET: socket_read(3): NG select <%d> ERRNO: %d %s\n",
45         retval, errno, strerror(errno));
46       #endif
47       ret = -1;
48       break;
49       }
50    if(retval >= 1){
51       ret = read(sk, readdata, getlen);
52       #ifdef SOCKET_BUG
53       printf("SOCKET: socket_read(4): NG select <%d> ERRNO: %d %s\n",
54         retval, errno, strerror(errno));
55       #endif
56       break;
57       }
58    } /* while */
59
60
61 fcntl(sk, F_SETFL, 0);
62
63 return(ret);
64 }
65
66
67