своим ftp клиентом выполняю параллельную отправку нескольких файлов на ftp сервер.делаю fork()ом пару дочерних процессов и они соединяются с сервером и передают ему файл. потом завершаются и далее передаётся следующий файл опять fork и тд. передаю где то 10 файлов. и где то в середине у меня начинает вызов connet с 21 портом сервера возвращаться с ошибкой cannot assign requested adress, хотя локальный порт отправки не занят. но если вызову connect ещё раз, то со второго третьего раза соединяется. Очень прошу помочь никак не могу разобраться. заранее благодарен
>своим ftp клиентом выполняю параллельную отправку нескольких файлов на ftp сервер.делаю fork()ом
>пару дочерних процессов и они соединяются с сервером и передают ему
>файл. потом завершаются и далее передаётся следующий файл опять fork и
>тд. передаю где то 10 файлов. и где то в середине
>у меня начинает вызов connet с 21 портом сервера возвращаться с
>ошибкой cannot assign requested adress, хотя локальный порт отправки не занят.
>но если вызову connect ещё раз, то со второго третьего раза
>соединяется. Очень прошу помочь никак не могу разобраться. заранее благодарен
Может проблема в том, что сервер не принимает более N коннектов с одного логина?
>>своим ftp клиентом выполняю параллельную отправку нескольких файлов на ftp сервер.делаю fork()ом
>>пару дочерних процессов и они соединяются с сервером и передают ему
>>файл. потом завершаются и далее передаётся следующий файл опять fork и
>>тд. передаю где то 10 файлов. и где то в середине
>>у меня начинает вызов connet с 21 портом сервера возвращаться с
>>ошибкой cannot assign requested adress, хотя локальный порт отправки не занят.
>>но если вызову connect ещё раз, то со второго третьего раза
>>соединяется. Очень прошу помочь никак не могу разобраться. заранее благодарен
>Может проблема в том, что сервер не принимает более N коннектов с
>одного логина?
да нет. параллельно отправлял и 10 файлов(10 коннектов) за один присест. ftp сервер (ftpd-BSD) на подконтрольной машине так что настраиваю как хочу.
ядро 2.4 linux RH
> ...
> и где то в середине
>у меня начинает вызов connet с 21 портом сервера возвращаться с
>ошибкой cannot assign requested adress, хотя локальный порт отправки не занят.Какой код ошибки в errno после того, как connect не смог присоединится?
Может быть слишком частые попытки соедининие и socket еще не успел очиститься.
>> ...
>> и где то в середине
>>у меня начинает вызов connet с 21 портом сервера возвращаться с
>>ошибкой cannot assign requested adress, хотя локальный порт отправки не занят.
>
>Какой код ошибки в errno после того, как connect не смог присоединится?
>
>
>Может быть слишком частые попытки соедининие и socket еще не успел очиститься.
>
код 99 EADDRNOTAVAIL
а что значит не успел очистится сокет?
какими вызовами узнать готов он или нет?
странно что когда у меня 2 параллельных соединения ошибки появляются только в одном.
спаибо
>код 99 EADDRNOTAVAIL
>а что значит не успел очистится сокет?
>какими вызовами узнать готов он или нет?
>странно что когда у меня 2 параллельных соединения ошибки появляются только в
>одном.
>спаибоесть у сокета или у tcp, точно не помню, параметер который называется linger или linger timeout, он определяет время в течении которого сокет будет занят даже если соединие завершено.
я встречал ситуацию когда программа пыталась открывать сокет достаточно часто и нарывалась на нехватку портов, но это происходило на локальной машине, так что в данной ситуации объяснение может быть другим.
я посмотрел. этот параметр отвечает за закрытие сокета. те как будет обрабатываться дескриптор функцией close().но у меня для каждого нового файла создаётся новый сокет и новое соединение. (так библиотека работает, принимает файл и отсылает на сервер,на новый файл новый вызов).раз я создаю новый сокет,а он нормально создаётся, может ли ли то как я закрыл старый влиять на connect исходящий с нового? вроде нет.
спасибо за рекомендации. но проблему так и не решил пока.есть ли ещё какие нибудь мнения