2013-07-23 2 views
0

Как читать send(sock_fd, line, size, 0);как читать send (sock_fd, line, size, 0) ;?

У меня есть программа, как это,

if (send(new_socket,sendToEMVSS,EMVSSSendBufferLength,0)!=EMVSSSendBufferLength)

Я пытаюсь запустить программу, но результат всегда !=EMVSSSendBufferLength

+1

Функция 'send' возвращает' -1' при ошибке. Вы должны это проверить. –

+0

Чтобы лучше понять, что происходит, вы можете разделить код. Удерживайте возвращаемое значение в 'retval' целым числом, а затем распечатайте значение и проверьте, что происходит. – phoxis

+0

Если ошибка не возникает, 'send' возвращает общее количество отправленных байтов, которое может быть меньше числа, запрошенного для отправки в параметре' size'. –

ответ

1

Вам действительно нужно, чтобы сохранить возвращаемое значение ,

  • Если значение -1, подробную информацию об ошибке вы найдете в errno.
  • Если он положительный, но менее EMVSSSendBufferLength, это означает, что только многие байты были отправлены, и вам придется отправлять остальные с помощью отдельного вызова. Этот отдельный вызов, скорее всего, заблокирует (или завершится с errno == EAGAIN, если он не блокируется), потому что причина не отправлять все в том, что окно передачи заполнено.

И действительно ли пакет фиксированного размера? Не ошибаетесь ли вы передавать размер буфера вместо фактического сообщения?

+0

как я хочу найти подробную информацию об ошибке в errno? – ZuL

+0

@ZuL: 'errno' - это просто макрос, который ведет себя как целочисленная переменная, возможные значения перечислены в документации по [' send'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html) , И помните, что 'errno' установлен на код ошибки при ошибке, но не очищен от успеха, поэтому вам нужно проверить, первым ли отправил -1. –

+0

Tq. Привет, я проверил .. его возвращение -1 – ZuL

Смежные вопросы