Bind Trouble

lazybiz

Well-known member
03.11.2010
1 339
0
#1
Проблема в следующем. Вызов bind() возвращает ошибку № 10048. Никак не соображу что ему надо.
Перепробовал всякие setsockopt с параметрами SO_REUSEADDR и SO_BROADCAST - результата ноль.
Из MSDN: "10048 - Address already in use."
Вчера код работал, а сегодня уже нет... %)

C++:
#include <winsock2.h>
#include <iostream.h>

int main( void )
{
WSADATA		wsaData;

if ( WSAStartup( MAKEWORD( 2, 2 ), &wsaData ) != 0 ) {
cout << "WSAStartup(): error" << endl;
return 1;
}

SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );

struct sockaddr_in	local;
local.sin_family		= AF_INET;
local.sin_port		= htons( 80 );
local.sin_addr.s_addr	= htons( INADDR_ANY );

if ( bind( s, (struct sockaddr *)&local, sizeof( local ) ) == SOCKET_ERROR ) {
cout << "bind(): error " << WSAGetLastError() << endl;
closesocket( s );
WSACleanup();
return 1;
}

//
// ...
//

WSACleanup();
return 0;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
Прива Лэйз :)
Вообще странно конечно...
Разницы конечно нет, но htons - тут не нужен

У меня только одно мнение что что то мешает порту, например запущенный WebServer какой-нибудь..
Может бранмауэр....

Вообщем кто то слушает 80ый порт помимо тебя ;-)
100%ов давать не буду, но 95% дам - смени порт все заработает..
А если заработает, то отлавливай того, кто слушает 80ый порт... :)
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
DarkKnight125 привет!
Заметил что проблема актуальна только тогда, когда запущен Skype.
Теперь вопрос в другом: как сделать так, чтобы и при Skype-е все было нормально!?

Цитата:
(lazybiz @ 22:11:2010 - 20:08) *
local.sin_addr.s_addr = htons( INADDR_ANY );
Разницы конечно нет, но htons - тут не нужен
Убрал.
Фаервол отключен.
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
А в настроках скайпа есть что-нить связанное с портами???
 

lazybiz

Well-known member
03.11.2010
1 339
0
#7
А в настроках скайпа есть что-нить связанное с портами???
Да! Есть: Использовать порты 80 и 443 в качестве входящих альтернативных.
Убрал галку - заработало.

Все равно мне интересно как сделать чтобы и с галкой работало. Думаю что есть какой-то способ.
 

DarkKnight

Well-known member
01.08.2010
653
0
#8
Никак ;-)) Ты же понимаешь, если порт занят, то он занят ;-)))
Всегда если софт работает по TCP/IP в документации прописанно что бы хотя бы нужные порты были открыты.. :)))
Можно конечно использовать маршрутизаторы...
Например Твой вебсервер (локально) занимает порт ну там 1543.... На маршрутизатор поступает запрос к порту 80... Маршрутизатор переправляет его в локальный порт 1543.... Только так...