00001
00016
00017
00018 #include "socket.h"
00019
00020
00027
00028 int TCPServerInit( int port, int *serverfd)
00029 {
00030 struct sockaddr_in dest;
00031
00033 *serverfd = socket(PF_INET, SOCK_STREAM, 0);
00034
00036 bzero((void*)&dest, sizeof(dest));
00037 dest.sin_family = PF_INET;
00038 dest.sin_port = htons( port);
00039
00040 dest.sin_addr.s_addr = INADDR_ANY;
00041
00043 bind( *serverfd, (struct sockaddr*)&dest, sizeof(dest));
00044
00045 return *serverfd;
00046 }
00047
00048
00056
00057 int TCPServerWaitConnection( int serverfd, int *clientfd, char *clientaddr)
00058 {
00059 struct sockaddr_in client_addr;
00060 socklen_t addrlen = sizeof(client_addr);
00061
00063 listen( serverfd, 20);
00064
00066 *clientfd = accept(serverfd, (struct sockaddr*)&client_addr, &addrlen);
00067
00068 strcpy( clientaddr, ( const char *)inet_ntoa( client_addr.sin_addr));
00069
00070 return *clientfd;
00071 }
00072
00073
00079
00080 int TCPClientInit( int *clientfd)
00081 {
00082 *clientfd = socket(PF_INET, SOCK_STREAM, 0);
00083
00084 return *clientfd;
00085 }
00086
00087
00095
00096 int TCPClientConnect( const int clientfd, const char *addr, int port)
00097 {
00098 struct sockaddr_in dest;
00099
00101 bzero(&dest, sizeof(dest));
00102 dest.sin_family = PF_INET;
00103 dest.sin_port = htons( port);
00104 inet_aton( addr, &dest.sin_addr);
00105
00107 return connect(clientfd, (struct sockaddr*)&dest, sizeof(dest));
00108 }
00109
00110
00118
00119 int TCPNonBlockRead( int clientfd, char* buf, int size)
00120 {
00121 int opts;
00122 opts = fcntl(clientfd, F_GETFL);
00123 opts = (opts | O_NONBLOCK);
00124 fcntl(clientfd, F_SETFL, opts);
00125
00126 return recv( clientfd, buf, size, 0);
00127 }
00128
00129
00137
00138 int TCPBlockRead( int clientfd, char* buf, int size)
00139 {
00140 int opts;
00141 opts = fcntl(clientfd, F_GETFL);
00142 opts = (opts & ~O_NONBLOCK);
00143 fcntl(clientfd, F_SETFL, opts);
00144
00145 return recv( clientfd, buf, size, 0);
00146 }
00147
00148
00156
00157 int TCPWrite( int clientfd, char* buf, int size)
00158 {
00159 int len= 0;
00160 len= send( clientfd, buf, size, 0);
00161
00162 return len;
00163 }
00164
00165
00171
00172 void TCPClientClose( int sockfd)
00173 {
00174 close( sockfd);
00175 }
00176
00177
00183
00184 void TCPServerClose( int sockfd)
00185 {
00186 close( sockfd);
00187 }
00188