summaryrefslogtreecommitdiff
path: root/src/client/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/client.c')
-rw-r--r--src/client/client.c52
1 files changed, 44 insertions, 8 deletions
diff --git a/src/client/client.c b/src/client/client.c
index 789233e..7af0543 100644
--- a/src/client/client.c
+++ b/src/client/client.c
@@ -35,7 +35,10 @@ static sock_udp_t *sock_server_udp;
static sock_tcp_t *sock_server_tcp;
static list_t *listRecvMsg;
-static buffer_t *clientBuffer;
+
+static buffer_t *clientRecvBuffer;
+static buffer_t *clientSendBuffer;
+
static my_time_t lastPing;
static my_time_t lastPingServerAlive;
@@ -115,6 +118,7 @@ static int initTcpClient(char *ip, int port, int proto)
}
disableNagle(sock_server_tcp);
+ setTcpSockNonBlock(sock_server_tcp);
printf("connect TCP %s %d\n", ip, port);
@@ -136,7 +140,8 @@ int initClient(char *ip, int port, int proto)
traffic_up = 0;
#endif
- clientBuffer = newBuffer(4096);
+ clientRecvBuffer = newBuffer(CLIENT_BUFFER_LIMIT);
+ clientSendBuffer = newBuffer(CLIENT_BUFFER_LIMIT);
if( ! isParamFlag("--udp") && ! isParamFlag("--tcp") )
{
@@ -174,6 +179,31 @@ int initClient(char *ip, int port, int proto)
return 0;
}
+static void sendBuffer()
+{
+ void *data;
+ int len;
+ int res;
+
+ len = getBufferSize(clientSendBuffer);
+
+ if( len == 0 )
+ {
+ return;
+ }
+
+ data = getBufferData(clientSendBuffer);
+
+ res = writeTcpSocket(sock_server_tcp, data, len);
+
+ if( res <= 0 )
+ {
+ return;
+ }
+
+ cutBuffer(clientSendBuffer, res);
+}
+
void sendServer(char *msg)
{
int ret;
@@ -199,7 +229,9 @@ void sendServer(char *msg)
if( sock_server_tcp != NULL )
{
- ret = writeTcpSocket(sock_server_tcp, msg, strlen(msg));
+ //ret = writeTcpSocket(sock_server_tcp, msg, strlen(msg));
+ addBuffer(clientSendBuffer, msg, strlen(msg));
+ ret = 1;
}
}
@@ -229,9 +261,9 @@ static int eventServerSelect()
traffic_down += ret;
#endif
- addBuffer(clientBuffer, buffer, ret);
+ addBuffer(clientRecvBuffer, buffer, ret);
- while( getBufferLine(clientBuffer, buffer, STR_PROTO_SIZE) >= 0 )
+ while( getBufferLine(clientRecvBuffer, buffer, STR_PROTO_SIZE) >= 0 )
{
if( strlen(buffer) > 0)
{
@@ -242,7 +274,7 @@ static int eventServerSelect()
return ret;
}
-static void eventServerBuffer()
+static void eventClientWorkRecvList()
{
proto_cmd_client_t *protoCmd;
char *line;
@@ -384,7 +416,8 @@ void eventClient()
eventPingServer();
selectClientSocket();
- eventServerBuffer();
+ eventClientWorkRecvList();
+ sendBuffer();
}
static void quitUdpClient()
@@ -406,9 +439,12 @@ static void quitTcpClient()
void quitClient()
{
proto_send_end_client();
+
assert( listRecvMsg != NULL );
+
destroyListItem(listRecvMsg, free);
- destroyBuffer(clientBuffer);
+ destroyBuffer(clientRecvBuffer);
+ destroyBuffer(clientSendBuffer);
if( sock_server_udp != NULL )
{