Added read_socket_ctl()
This commit is contained in:
parent
4800710443
commit
6952973e02
1 changed files with 43 additions and 0 deletions
43
ddcd.cpp
43
ddcd.cpp
|
@ -386,6 +386,46 @@ void client_cleanup()
|
||||||
close(this_client->pipefd[0]);
|
close(this_client->pipefd[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CTL_BUFSIZE 1024
|
||||||
|
|
||||||
|
int read_socket_ctl(int fd, char* output, int max_size)
|
||||||
|
{
|
||||||
|
//fprintf(stderr, "doing read_socket_ctl %d\n", fd);
|
||||||
|
//if(!fd) return 0;
|
||||||
|
static char buffer[CTL_BUFSIZE];
|
||||||
|
static int buffer_index=0;
|
||||||
|
if(buffer_index==CTL_BUFSIZE) buffer_index=0;
|
||||||
|
int bytes_read=recv(fd,buffer+buffer_index,(CTL_BUFSIZE-buffer_index)*sizeof(char), MSG_DONTWAIT);
|
||||||
|
if(bytes_read<=0) return 0;
|
||||||
|
fprintf(stderr, "recv %d\n", bytes_read);
|
||||||
|
|
||||||
|
int prev_newline_at=0;
|
||||||
|
int last_newline_at=0;
|
||||||
|
for(int i=0;i<buffer_index+bytes_read;i++)
|
||||||
|
{
|
||||||
|
if(buffer[i]=='\n')
|
||||||
|
{
|
||||||
|
prev_newline_at=last_newline_at;
|
||||||
|
last_newline_at=i+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(last_newline_at)
|
||||||
|
{
|
||||||
|
int oi=0;
|
||||||
|
for(int i=prev_newline_at;buffer[i]!='\n'&&oi<max_size;i++) output[oi++]=buffer[i]; //copy to output buffer
|
||||||
|
output[oi++]='\0';
|
||||||
|
memmove(buffer,buffer+last_newline_at,buffer_index+bytes_read-last_newline_at);
|
||||||
|
buffer_index=bytes_read-last_newline_at;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer_index+=bytes_read;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void client()
|
void client()
|
||||||
{
|
{
|
||||||
in_client=1;
|
in_client=1;
|
||||||
|
@ -418,8 +458,11 @@ void client()
|
||||||
fprintf(stderr, MSG_START "pipe_stdout[0] = %d\n", pipe_stdout[0]);
|
fprintf(stderr, MSG_START "pipe_stdout[0] = %d\n", pipe_stdout[0]);
|
||||||
write(pipe_ctl[1], "0.0\n", 4);
|
write(pipe_ctl[1], "0.0\n", 4);
|
||||||
}
|
}
|
||||||
|
char recv_cmd[CTL_BUFSIZE];
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
|
while(read_socket_ctl(this_client->socket, recv_cmd, CTL_BUFSIZE))
|
||||||
|
fprintf(stderr, "read_socket_ctl: %s\n", recv_cmd);
|
||||||
read(input_fd,buf,bufsizeall);
|
read(input_fd,buf,bufsizeall);
|
||||||
if(send(this_client->socket,buf,bufsizeall,0)==-1)
|
if(send(this_client->socket,buf,bufsizeall,0)==-1)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue