Pregunta

¿Hay alguna API Win32 escalable (como IOCP no como seleccionar) que le da el reactor de estilo operaciones en las conexiones? Que yo sepa IOCP le permite recibir notificaciones de operaciones completadas al igual que los datos leídos o escritos (proactor) pero estoy buscando para el estilo del reactor de operaciones: I hay necesidad de obtener una notificación cuando la toma es leer o escribir (reactor).

Algo similar a epoll, kqueue, /dev/poll?

¿Existe tal API de Win32? Si es así, ¿dónde puedo encontrar un manual en él?

** Aclaración:. ** I Need select como API de sockets que es tan escalable como IOCP, o que estoy buscando una manera de utilizar IOCP en el reactor operaciones similares

Aún más aclaraciones: IOCP le permite recibir una notificación de terminación de la operación dada. Por ejemplo:

WSARecv(buffer,...); // start reading
WSAWaitForMultipleEvents(...); // wait when read is done

Así que me Notificaciones por después operación se realiza -. Estilo supervisor de operaciones

Lo que necesito es algo así:

WSARecv( NOTHING ); // start waiting for readability (not actual read)
WSAWaitForMultipleEvents(...); // wait until read would not block
// Now WSARecv would not block
WSARecv(buffer,...); // now actual non-blocking read

¿Cómo puedo hacer esto?

¿Fue útil?

Solución 3

No es posible.

he comprobado fuentes Boost.Asio que tienen operaciones de estilo reactor y utilizan IOCP. Para todas las operaciones de estilo reactor hilo separado con select se utiliza en lugar de IOCP.

Otros consejos

¿Quieres mirar el WSAAsyncSelect API. Se utiliza una cola de mensajes de Windows para indicar que un mango se lee de lectura / escritura / lo que sea, por lo que no tiene los beneficios de concurrencia de IOCP, pero le permite implementar un modelo de reactor estándar sin tener un límite en el número de manijas (como WSAWaitForMultipleEvents).

Estoy confundido, no es patrón de reactor en el que las secuencias de roscado espera en múltiples fuentes de eventos? Eso sería de selección (), que admite Windows. El patrón Proactor es donde hay una sola devolución de llamada por llamada, que se puede hacer a través de ReadFileEx / WriteFileEx.

¿Usted ha intentado pasar de cero a nNumberOfBytesToRead, por ejemplo ReadFile (socket_fd, ..)?

Tal vez pueda ayudar a conseguir el evento "leer listo".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top