OSDN Git Service

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