c로 telnet을 프로그램하는데 illegal seek 오류가 왜 나는지 모르겠습니다...ㅜㅜ

babisss의 이미지

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 맞나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.