Я работаю на FTP-клиенте. Я пытался применить идентификатор сокета для подключения к серверу. Вот мой код. Многие переменные объявлены внутри класса.
int Client::connectServer() {
int ret = 0;
controlSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(controlSocket < 0 )
{
cout<<"Creating Control Socket Failed";
cout<<"err="<<strerror(errno);
system("pause");
return -1;
}
serverAddr.sin_family=AF_INET;
serverAddr.sin_addr.s_addr=inet_addr(ip_addr.c_str());
serverAddr.sin_port=htons(PORT);
memset(serverAddr.sin_zero,0,sizeof(serverAddr.sin_zero));
ret=::connect(controlSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
if(ret < 0)
{
cout<<"Control Socket Connecting Failed";
cout<<"err="<<strerror(errno);
system("pause");
return -1;
}
}
Я вызывал эту функцию дважды, используя почти один и тот же код. Но один из них не работал (не удалось подключиться). Затем я использовал тот же IP-адрес для отладки. Результат показывает, что каждая вещь одинакова, но значение controlSocket
.
Когда controlScoket
не было инициализировано, оно оценивается 3131961357
. Тогда это значение 4294967295
после controlSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
. Я думаю, что это больше, чем максимальные дескрипторы файлов? Однако errno
- это 0
. С другой стороны, нормальное значение 1932
.