728x90
입출력 루틴 분할
- 클라이언트의 프로세스를 fork 하여 입력을 담당하는 프로세스와 출력을 담당하는 프로세스로 따로 사용
- 입출력 루틴을 분할하면 보내는 것과 받는 것을 동시에 진행할 수 있음
int main(int argc, char *argv[])
{
int sock;
pid_t pid;
char buf[BUF_SIZE];
struct sockaddr_in serv_adr;
...;
sock=socket(PF_INET, SOCK_STREAM, 0);
...;
if(connect(sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1) {
printf("connect() error!");
}
pid=fork();
if(pid==0) {
write_routine(sock, buf);
}
else {
read_routine(sock, buf);
}
close(sock);
return 0;
}
void read_routine(int sock, char *buf)
{
while(1)
{
int str_len=read(sock, buf, BUF_SIZE);
if(str_len==-1) { continue; }
buf[str_len]=0;
printf("Message from server: %s", buf);
}
}
void write_routine(int sock, char *buf)
{
while(1)
{
fgets(buf, BUF_SIZE, stdin);
if(!strcmp(buf,"q\n") || !strcmp(buf,"Q\n"))
{
shutdown(sock, SHUT_WR);
return;
}
write(sock, buf, strlen(buf));
}
}
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 12-1. IO 멀티플렉싱 기반의 서버 (0) | 2021.03.05 |
---|---|
열혈 TCP/IP 11-1. 프로세스간 통신의 기본 개념 (0) | 2021.03.01 |
열혈 TCP/IP 10-4. 멀티태스킹 기반의 다중접속 서버 (0) | 2021.03.01 |
열혈 TCP/IP 10-3. 시그널 핸들링 (0) | 2021.03.01 |
열혈 TCP/IP 10-2. 프로세스 & 좀비(Zombie) 프로세스 (0) | 2021.03.01 |