LINUX.ORG.RU

Проблема с connect


0

0

вот код:

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char **argv) {
int sockfd;
struct sockaddr_in servaddr;
char buff[4096];

if (sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0) {
printf("Socket ERROR: cannot create socket\n");
exit(1);
}

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(21);
if (inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0) printf("INET_PTON ERROR\n");
if (connect(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr)) < 0) {
        printf("Connection ERROR\n");
        exit(1);
        }
while(read(sockfd,buff,4095)!=0) fputs(buff,stdout);
}

при выполнении ./a.out 10.1.1.1 постоянно выдается ошибка Connection ERROR ... хотя telnet 10.1.1.1 21 работает нормально... где ошибка в этом коде?
anonymous

мне почему-то не нравится вот это:

if (inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0) printf("INET_PTON ERROR\n");

cvv ★★★★★
()

похоже у тебя не линукс

замени

if (sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0)

на

if (sockfd=socket(PF_INET, SOCK_STREAM, 0) < 0)

cvv ★★★★★
()

Заменить if (sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0)

на if ((sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0)

и подумать на тему приоритетов операций.

kpanic ★★
()

> if (sockfd=socket(AF_INET, SOCK_STREAM, 0) < 0) {

C итак вполне сложный а ты еще больше все усложняешь, почемубы просто
не написать

sockfd = socket(..);
if (sockfd < 0) {

и не мучить себя запоминанием приоритетностей операций

таких языках типа C чем больше ты отделяешь семантику от синтаксиса тем
тебе легче жить будет ..

lg ★★
()
Ответ на: комментарий от cvv

дабы меньше было таких граблей настойчиво рекомендуется всегда пользовать -Wall

то что компилер выругается в конкретной ситуации я неуверен но во многих похожих ругается

cvv ★★★★★
()
Ответ на: комментарий от cvv

спасибо! сейчас все работает... kpanic и lg правы ... проблема в приоритетах

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.