/**********************************************************************
select.c : simple internet socket client program with select
Jan 6,2001 copyright Takeshi FUJIKI (fujiki@fc-lab.com)
POPサーバと通信するクライアントプログラム
***********************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUFLEN 1024
#define HOSTNAME "panda.local.fc-lab.com"
int main(int argc,char *argv[]) {
struct hostent *host; /* defined in /usr/include/netdb.h */
struct sockaddr_in server; /* defined in /usr/include/netinet/in.h */
fd_set readmask;
char buffer[BUFLEN];
int s, option, n;
u_short pop3_port = 110;
char *p;
bzero((char *)&server,sizeof(server));
server.sin_family = AF_INET;
/* server.sin_port = htons(pop3_port); */
server.sin_port = htons(110);
/* ホスト名によるサーバアドレスの設定 */
host = gethostbyname(HOSTNAME);
bcopy(host->h_addr,(char *)&server.sin_addr,host->h_length);
s = socket(AF_INET,SOCK_STREAM,0);
connect(s,&server,sizeof(server));
FD_ZERO(&readmask);
do {
/* FD_SETでセットしたfile descripterに関して入力をワッチする */
FD_SET(0,&readmask);
FD_SET(s,&readmask);
/* 入力があるとselect()はreadmaskに入力元の情報を入れ終了する */
select(s+1,&readmask,NULL,NULL,NULL);
if (FD_ISSET(0,&readmask)) { /* consoleから入力があった場合 */
n = read(0,buffer,BUFLEN);
/* readでコンソールから入力では改行コードは\nしか入らない */
buffer[n-1]='\r';
buffer[n]='\n';
write(s,buffer,n+1);
} else if (FD_ISSET(s,&readmask)) { /* socketから入力があった場合 */
n = read(s,buffer,BUFLEN);
write(0,buffer,n);
}
} while(strncmp(buffer,"quit",4));
}
|