我正在寫一個非阻塞聊天服務器,到目前爲止服務器工作正常,但我不知道如何糾正部分發送,如果他們發生。 send(int,char *,int);函數總是在成功時返回0,在發送失敗時返回-1。我讀過的每個文檔/手冊頁都說它應該返回實際送入網絡緩衝區的字節數。我已經檢查確認我可以發送到服務器並重復收回數據而沒有任何問題。伯克利插座發送返回0成功非阻塞發送
這是我用來調用send的函數。我都試圖首先將返回數據打印到控制檯,然後嘗試換行返回ReturnValue;同時調試。同樣的結果,ReturnValue始終爲0或-1;
int Connection::Transmit(string MessageToSend)
{
// check for send attempts on a closed socket
// return if it happens.
if(this->Socket_Filedescriptor == -1)
return -1;
// Send a message to the client on the other end
// note, the last parameter is a flag bit which
// is used for declaring out of bound data transmissions.
ReturnValue = send(Socket_Filedescriptor,
MessageToSend.c_str(),
MessageToSend.length(),
0);
return ReturnValue;
}
當返回值是-1時,你會得到什麼錯誤?檢查'errno'的值或使用'perror' –
當'send'返回'-1'時,你應該在POSIX系統(例如Linux或OSX)上檢查'errno',或者在Windows上使用'WSAGetLastError'。這將幫助你瞭解哪裏出了問題。 –
'send(int,char *,int);'不完全是Berkeley Socket'send'。你在使用哪個平臺?你是否嘗試過使用'write'而不是'send'? –