2010-02-05 5 views
1

В Solaris как обнаружить сломанную розетку в send() call? Я не хочу использовать сигнал.
Я попробовал SO_NOSIGPIPE и MSG_NOSIGNAL, но оба они недоступны в Solaris, и моя программа убивается с ошибкой «сломанной трубы».Обнаружение ломаной трубы в Solaris send() call

Есть ли способ обнаружить неисправную трубу?

Спасибо!

ответ

1

Вы должны будете использовать sigaction() конкретно игнорировать SIGPIPE сигнал:

struct sigaction act; 

act.sa_handler = SIG_IGN; 
sigaction(SIGPIPE, &act, NULL); 

... тогда send() вернет -1 с errno набором для EPIPE.

+0

Спасибо. Это похоже на функцию signal(). Я не хочу использовать signal() или sigaction(). – Adil

+0

Ну, это ваш единственный вариант, если вы не хотите страдать 'SIGPIPE' на Solaris. Вы можете использовать третий параметр 'sigaction()' для сохранения предыдущего расположения сигнала и восстановить его после вызова 'send()', если вам нужно. – caf

+0

OK Спасибо. Я понимаю. – Adil

1

Я предполагаю, что в Solaris у вас есть только ограниченные возможности. AFAIK, предложенный кафе, представляется лучшим решением.