@@ -214,3 +214,45 @@ TEST_IMPL(tcp_listen_without_bind) {
214214 MAKE_VALGRIND_HAPPY ();
215215 return 0 ;
216216}
217+
218+
219+ TEST_IMPL (tcp_bind_writable_flags ) {
220+ struct sockaddr_in addr ;
221+ uv_tcp_t server ;
222+ uv_buf_t buf ;
223+ uv_write_t write_req ;
224+ uv_shutdown_t shutdown_req ;
225+ int r ;
226+
227+ ASSERT (0 == uv_ip4_addr ("0.0.0.0" , TEST_PORT , & addr ));
228+ r = uv_tcp_init (uv_default_loop (), & server );
229+ ASSERT (r == 0 );
230+ r = uv_tcp_bind (& server , (const struct sockaddr * ) & addr , 0 );
231+ ASSERT (r == 0 );
232+ r = uv_listen ((uv_stream_t * )& server , 128 , NULL );
233+ ASSERT (r == 0 );
234+
235+ ASSERT (0 == uv_is_writable ((uv_stream_t * ) & server ));
236+ ASSERT (0 == uv_is_readable ((uv_stream_t * ) & server ));
237+
238+ buf = uv_buf_init ("PING" , 4 );
239+ r = uv_write (& write_req , (uv_stream_t * ) & server , & buf , 1 , NULL );
240+ ASSERT (r == UV_EPIPE );
241+ r = uv_shutdown (& shutdown_req , (uv_stream_t * ) & server , NULL );
242+ #ifdef _WIN32
243+ ASSERT (r == UV_EPIPE );
244+ #else
245+ ASSERT (r == UV_ENOTCONN );
246+ #endif
247+ r = uv_read_start ((uv_stream_t * ) & server , NULL , NULL );
248+ ASSERT (r == UV_ENOTCONN );
249+
250+ uv_close ((uv_handle_t * )& server , close_cb );
251+
252+ uv_run (uv_default_loop (), UV_RUN_DEFAULT );
253+
254+ ASSERT (close_cb_called == 1 );
255+
256+ MAKE_VALGRIND_HAPPY ();
257+ return 0 ;
258+ }
0 commit comments