Именованные каналы
От: SBoyko  
Дата: 18.03.03 21:25
Оценка:
Помогите разобраться с проблемой. У меня служба не хочет сотрудничать с процессами.


/// СЕРВЕРНАЯ ЧАСТЬ (в службе) ////////

событие взводится когда клиент прочитает содержимое
UserFekEvent = OpenEvent(SYNCHRONIZE,FALSE,USER_FEK_EVENT);

создаю канал
hPipe = CreateNamedPipe(FEK_PIPE_NAME,
PIPE_ACCESS_OUTBOUND,
PIPE_TYPE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
sizeof(DWORD),
sizeof(DWORD),
100,
NULL);
ConnectNamedPipe( hPipe, NULL );
..
пишу в него
WriteFile(hPipe,&SendBuf,sizeof(DWORD),&w,NULL);
...
жду когда клиент прочитает ...
WaitForSingleObject(UserFekEvent,INFINITE);

и разрываю соединение....
DisconnectNamedPipe( hPipe, NULL );


////// КЛИЕНТСКАЯ ЧАСТЬ //////////

hEvent = CreateEvent(NULL,TRUE,FALSE,USER_FEK_EVENT);
hPipe = CreateFile(FEK_PIPE_NAME,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
.. читаю из канала
ReadFile(hPipe,&Buf,sizeof(DWORD),&w,NULL);
.. закрываю
CloseHandle(hPipe);
printf("\nFEK %u",Buf);
.. взвожу событие канал прочитан
SetEvent(hEvent);

Проблема в том, что при первом запуске все работает нормально, но при последующих (до перезагрузки службы) выдается ошибка при открытии канала на клиенте ERROR_PIPE_BUSY.
Re: Именованные каналы
От: Carface Россия  
Дата: 19.03.03 05:44
Оценка:
Здравствуйте, SBoyko, Вы писали:

SB>Помогите разобраться с проблемой. У меня служба не хочет сотрудничать с процессами.


SB>и разрываю соединение....

SB>DisconnectNamedPipe( hPipe, NULL );

CloseHandle(hPipe) ; // Это делается ?
Re[2]: Именованные каналы
От: SBoyko  
Дата: 19.03.03 09:29
Оценка:
Здравствуйте, Carface, Вы писали:

C>CloseHandle(hPipe) ; // Это делается ?


да делается
Re[3]: Именованные каналы
От: Аноним  
Дата: 19.03.03 09:55
Оценка:
Здравствуйте, SBoyko, Вы писали:

попробуй на клиенте подожать, пока pipe освободится (через WaitNamedPipe, пример есть в MSDN). возможно клиент пыиается законнектиться пока сервер еще не успел сделать Disconnect от предыдущего клиента.
Re[4]: Именованные каналы
От: SBoyko  
Дата: 19.03.03 11:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, SBoyko, Вы писали:


А>попробуй на клиенте подожать, пока pipe освободится (через WaitNamedPipe, пример есть в MSDN). возможно клиент пыиается законнектиться пока сервер еще не успел сделать Disconnect от предыдущего клиента.


Все, спасибо всем участникам обсуждения, ЗАРАБОТАЛО
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.