У меня есть программа для отправки POST-запроса на сервер.
Я использую cURL для отправки запроса.
Моя программа работает на Windows и Linux (на данный момент Ubuntu 9.10).
Когда сервер получает запрос, он обрабатывает его и возвращает код ошибки (0000, если ошибок нет) и описание ошибки (если есть).
Веб-сервер сервера - Microsoft IIS.
Когда я запускаю свою программу в Windows, она работает хорошо.
Но когда я запускаю программу в Linux, она зависает на 30 секунд (тайм-аут cURL) и выдает ошибку «Тайм-аут операции через 30000 миллисекунд с 5 полученными байтами».
Как я знаю, проблема на стороне сервера - сервер не отправляет размер ответа и не закрывает сокетное соединение.
журналы cURL (из Linux):
11:00:09.544 Process() curl: libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15
11:00:09.941 DebugCallback() About to connect() to sms1.redoxygen.net port 80 (#0)
11:00:09.941 DebugCallback() Trying 203.145.62.146...
11:00:10.084 DebugCallback() Connected to sms1.redoxygen.net (203.145.62.146) port 80 (#0)
11:00:10.085 DebugCallback() POST /sms.dll?private&type=26 HTTP/1.1
Host: sms1.redoxygen.net
Content-Length: 244
11:00:10.086 DebugCallback() [244 bytes of DATA]
11:00:10.087 ReadCallback() No more data to send
11:00:10.292 WriteCallback() HTTP/1.1 200 OK
11:00:10.293 DebugCallback() Content-Type: text/html
11:00:10.294 DebugCallback() no chunk, no close, no size. Assume close to signal end
11:00:10.294 WriteCallback()
11:00:10.466 DebugCallback() 0000
11:00:40.500 DebugCallback() Operation timed out after 30000 milliseconds with 5 bytes received
11:00:40.501 DebugCallback() Closing connection #0
В Windows журналы почти одинаковы, но без таймаута - он закрывает сокет сразу после получения «0000».
Я могу анализировать полученные данные и закрывать соединение, если получаю «0000», но это «грязный хак».
Есть идеи?