|
@@ -391,11 +391,12 @@ ServerNetworkLayerTCP_start(UA_ServerNetworkLayer *nl, UA_Logger logger) {
|
|
|
static size_t
|
|
|
ServerNetworkLayerTCP_getJobs(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout) {
|
|
|
ServerNetworkLayerTCP *layer = nl->handle;
|
|
|
- fd_set fdset;
|
|
|
+ fd_set fdset, errset;
|
|
|
UA_Int32 highestfd = setFDSet(layer, &fdset);
|
|
|
+ setFDSet(layer, &errset);
|
|
|
struct timeval tmptv = {0, timeout * 1000};
|
|
|
UA_Int32 resultsize;
|
|
|
- resultsize = select(highestfd+1, &fdset, NULL, NULL, &tmptv);
|
|
|
+ resultsize = select(highestfd+1, &fdset, NULL, &errset, &tmptv);
|
|
|
if(resultsize < 0) {
|
|
|
*jobs = NULL;
|
|
|
return 0;
|
|
@@ -426,8 +427,10 @@ ServerNetworkLayerTCP_getJobs(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt1
|
|
|
size_t j = 0;
|
|
|
UA_ByteString buf = UA_BYTESTRING_NULL;
|
|
|
for(size_t i = 0; i < layer->mappingsSize && j < (size_t)resultsize; i++) {
|
|
|
- if(!UA_fd_isset(layer->mappings[i].sockfd, &fdset))
|
|
|
- continue;
|
|
|
+ if(UA_fd_isset(layer->mappings[i].sockfd, &errset)) {}
|
|
|
+ else if(!UA_fd_isset(layer->mappings[i].sockfd, &fdset)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
UA_StatusCode retval = socket_recv(layer->mappings[i].connection, &buf, 0);
|
|
|
if(retval == UA_STATUSCODE_GOOD) {
|
|
|
js[j].job.binaryMessage.connection = layer->mappings[i].connection;
|