c로 telnet을 프로그램하는데 illegal seek 오류가 왜 나는지 모르겠습니다...ㅜㅜ
41 struct buffer
42 {
43 char *buf;
44 int size;
45 int head;
46 int tail;
47 int count;
48 };
49
50 struct buffer write_buf;
51 struct buffer read_buf;
52
53 int sock;
54
55
56 int telnet_connect(void);
57 void read_sock();
58 void main_loop();
59
60
61 int telnet_connect(void)
62 {
63 int c;
64 int sin_size;
65 struct sockaddr_in serv_addr;
66
67 serv_addr.sin_family=AF_INET;
68 serv_addr.sin_port=htons(2604);
69 serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
70
71 if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
72 {
73 perror("socket");
74 exit(1);
75 }
76
77 sin_size=sizeof(struct sockaddr_in);
78
79 if(connect(sock,(struct sockaddr *)&serv_addr,sin_size)==-1)
80 {
81 perror("connect");
82 exit(1);
83
84 }
85 main_loop();
86
87 return 0;
88
89 }
90
91 void main_loop()
92 {
93 int maxfd;
94 int ret;
95 fd_set in_set,out_set;
96
97 while(1)
98 {
99 FD_ZERO(&in_set);
100 FD_ZERO(&out_set);
101
102 if(write_buf.count>0)
103 FD_SET(sock,&out_set);
104
105 FD_SET(0,&in_set);
106 FD_SET(sock,&in_set);
107 maxfd=sock;
108
109 ret=select(maxfd+1,&in_set,&out_set,NULL,NULL);
110 if(ret<0)
111 {
112 perror("select");
113 exit(1);
114 }
115 if(FD_ISSET(sock,&in_set))//소켓으로 부터 데이터를 읽는다.
116 {
117 FD_CLR(sock,&in_set);
118
119 read_sock();
120 }
121 } //while
122 }
123
124 void read_sock()
125 {
126 int n;
127 char buf[2048];
128 char buff[]="oullim";
129 char bufff[]="enable";
130 // if(read_buf.size <=read_buf.tail)
131 // return;
132 //n=read(sock,read_buf.buf+read_buf.tail,read_buf.size-read_buf.tail);
133 sleep(2);
134 write(sock,buff,strlen(buf));
135 sleep(2);
136 n=read(sock,buf,read_buf.size-read_buf.tail);
137 printf("1\n");
138
139 printf("sock=>%s\n",buf);
140 if(n<0 && errno == EWOULDBLOCK)
141 n=0;
142
143 if(n<0)
144 {
145 perror("read");
146 exit(1);
147 }
148 if(n==0)
149 {
150 perror("peer_died");
151 }
152 sleep(2);
153 write(sock,bufff,strlen(buf));
154 sleep(2);
155 n=read(sock,buf,read_buf.size-read_buf.tail);
156
157 if(n==0)
158 {
159 perror("peer_died");
160 }
161
162 sleep(2);
163 write(sock,buff,strlen(buf));
164 sleep(2);
165 n=read(sock,buf,read_buf.size-read_buf.tail);
166
167 if(n==0)
168 {
169 perror("peer_died");
170 }
171
172 read_buf.count +=n;
173 read_buf.tail +=n;
174 }
175
176
177
178
179
180
181 int main(void)
182 {
183 telnet_connect();
184 return 0;
185 }
결과입니다.
1
sock=>
peer_died: Success
peer_died: illegal seek
1
sock=>
peer_died: illegal seek
peer_died: illegal seek
이렇게 반복됩니다. 찾아보니까 접속을 차단하는거라고 하는데 참고로 서버 자체에서 (telnet 127.0.0.1) 포트번호 하면 잘 됩니다.
근데 제가 프로그램 한거로 하면 접속이 안되고 저런 에러가 뜨네요.
구글신을 본결과 hosts 파일과 nameserver를 고치면 된다고 하는데 로컬 주소이고 위에처럼 서버에서 하면 잘되기에 더더욱 모르겠습니다.
왜그런지 알려주세요...
포트가 2604 맞나요?
포트가 2604 맞나요?
댓글 달기