Polling on socket descriptor does not return pollhup

I have a query related to the functioning of poll() system call on solaris and linux platforms.

When the client is abnormally terminated, it is observed that on Linux the socket is immediately closed and the server gets ECONNREFUSED.
But in case of Solaris it is observed that the socket is not closed immediately but waits until timeout happens and server shows EINPROGRESS rather than ECONNREFUSED.

I have the following code to poll on the socket-

ufds[0].fd = sock;
ufds[0].events = POLLIN | POLLOUT;
ufds[0].revents = 0x00;
rv = poll(ufds, 1,300000);

When the other end of a FIFO closes socket descriptor, poll() doesn't return with POLLHUP set in revents. Instead it keeps waiting on Solaris till the timeout happens.
Is it the case that on Linux poll call will return POLLHUP and on Solaris it will not?