Листинг 15.20. Процедура сервера, завершающая работу сразу после запуска
//doors/serverintr1.c
1 #include "unpipc.h"
2 void
3 servproc(void *cookie, char *dataptr, size_t datasize,
4 door_desc_t *descptr, size_t ndesc)
5 {
6 long arg, result;
7 pthread_exit(NULL); /* посмотрим, что произойдет с клиентом */
8 arg = *((long*)dataptr);
9 result = arg * arg;
10 Door_return((char*)&result, sizeof(result), NULL, 0);
11 }
Оставшаяся часть сервера не претерпевает изменений по сравнению с листингом 15.2, а программу-клиент мы берем из листинга 15.1.
Запустив клиент, мы увидим, что вызов door_call возвращает ошибку EINTR, если процедура сервера завершается досрочно:
solaris % clientintr1 /tmp/door1 11
door_call error: Interrupted system call