Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Can t create new socket   Найти похожие ветки 

 
Brand   (2002-07-28 17:29) [0]

В 2000 винде нет проблем. А попробовал запустить свю прогу в 98-ой и на строчке ClientSocket1.Active:=true вылетает ошибка "Can"t create new socket"
Очеь обидно. В чем может быть дело???


 
Brand   (2002-07-28 19:19) [1]

Причем, что интерестно, от винды к винде по-разному. Пробовал на трех разных компах с 98-ой виндой. На двух все нормально, а вот один попался с таким глюком. Может DLL-ки какой-то нехватает???


 
Brand   (2002-07-29 01:15) [2]

Еще некоторые подробности:
На том компе стоял WinGate!!!!!
После сноса все заработало. Это конечно хорошо, но хотелось-бы как-то предусмотреть эту ситуацию, и предотвратить вылетание таких критических ошибок.


 
cyborg   (2002-07-29 06:33) [3]

Просто видимо сокет уже занят был.


 
Digitman   (2002-07-29 12:50) [4]

>cyborg
"Can"t create new socket" = "сокет уже занят" ???

Это как ?


 
Malder   (2002-07-29 16:55) [5]

Хм. Вот так. Can"t create new socket - не могу создать новый сокет. А вот почему не может - непонятно. Возможно порт уже был занят другим приложением. Также на линейке win9x нельзя открыть более 255 сокетов. Других причин я не знаю.


 
cyborg   (2002-07-29 18:35) [6]

>"Can"t create new socket" = "сокет уже занят" ???
Я имел ввиду порт, было у меня такое, когда я пытался повесить сервер на занятый порт.


 
Digitman   (2002-07-30 08:42) [7]

Не выдумывайте на счет "занятости порта". Не могло быть такого. Потому как создание гнезда и его привязка к порту - две отдельные, совершенно разные операции, выполняемые в контексте DoOpen(). Гнездо создается без указания порта - нет в вызове socket() такого параметра. А bind() действительно может дать отказ при занятом целевом порте, но это же - далеко не create !

Нужно смотреть код возврата socket(), оттрассировав DoOpen() пошагово.

Подозреваю еще, что есть какие-то проблемы в установке/конфигурации протокола TCP/IP в сетевых настройках


 
Malder   (2002-07-30 19:38) [8]

Digitman, человек использует TClientSocket. Какие нахрен DoOpen(), bind() ? Там это все автоматом же. Может этот компонент пишет, что не может создать сокет, если порт занят. Я не знаю как он там работает...


 
cyborg   (2002-07-30 20:35) [9]

Ну не знаю, я с вами спорить не буду, но когда я пытался запустить одновременно и включить на одном порту два сервера моего чата, то вылетала какая то ошибка, уже не помню чего там говорилось.


 
Malder   (2002-07-31 00:47) [10]

А да, кстати. Если у тебя TClientSocket - то бинд тут не при чем. Может правда у тебя протокол TCP/IP не стоит ?


 
Digitman   (2002-07-31 08:31) [11]

>Malder

Bind() в контексте TClientSocket действительно ни при чем.
>>"Возможно порт уже был занят другим приложением" - твоя фраза ?Так вот только bind() может дать отказ по этой причине, поскольку именно в нем происходит попытка занятия порта. А он никогда не выполняется в контексте клиента, только - сервера. Т.е. эта причина исключена на все 100%.
Вот конкретное место в коде клиента, где возникает исключение :


procedure TCustomWinSocket.Open(const Name, Address, Service: string; Port: Word; Block: Boolean);
begin
if FConnected then raise ESocketError.CreateRes(@sSocketAlreadyOpen);
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
if FSocket = INVALID_SOCKET then raise ESocketError.CreateRes(@s CannotCreateSocket);
try
Event(Self, seLookUp);
if Block then
begin
FAddr := InitSocket(Name, Address, Service, Port, True);
DoOpen; // здесь - вызов connect()
end else
AsyncInitSocket(Name, Address, Service, Port, 0, True);
except
Disconnect(FSocket);
raise;
end;
end;


Т.о., для установления причины отказа достаточно проконтролировать в отладчике значение WSAGetLastError() после неуспешного выполнения socket(). К сожалению, Борланд не счел нужным возбуждать исключение с точной диагностикой отказа. Но ради установления причины проделать однократно это вполне можно и нужно.


 
Malder   (2002-07-31 18:10) [12]

"Возможно порт уже был занят другим приложением" - твоя фраза ?

моя фраза. Но до меня потом дошло, что у человека TClientSocket =) И думаю, у него действительно не стоит TCP/IP протокол. Потому что вроде уж сокет можно создать при любом стечении обстоятельств. Даже если нет соединения и т.д...


 
Brand   (2002-07-31 18:44) [13]

Рассказываю:
Вот именно в функции ...Open на строчке:
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
возвращается "-1"
И есть у меня TCP/IP
Я ж писал, что стоял там WinGate и может быть он что-то не давал, потому-что после сноса WinGate все заработало без проблем!!!


 
Digitman   (2002-08-01 08:16) [14]

>Brand

Повторяю :

Return Values

If no error occurs, socket returns a descriptor referencing the new socket. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling WSAGetLastError.

Что тут непонятного ? Получил -1, тут же запросил WSAGetLastError - вот тебе и причина


 
iZEN   (2002-08-02 12:45) [15]

Какие странные детские проблемы ...:)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-7946
Dmitry Toropov
2002-09-24 06:58
2002.10.03
расшифровать исключение EMCIDeviceError


7-8186
dem0n2k
2002-07-25 22:45
2002.10.03
Как программно узнать ВСЕ запушенные процессы?


4-8214
Soft
2002-08-16 14:04
2002.10.03
Завершился ли Thread или нет?


6-8078
RV
2002-07-22 11:33
2002.10.03
RAS + стандартные средства Делфей и Видов


1-8063
Vladislav
2002-09-19 18:33
2002.10.03
Как подавить сообщение.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский