[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[623] mplayerxp/libmpstream2/tcp.cpp
Brought to you by:
olov
From: <nic...@us...> - 2012-12-28 17:28:06
|
Revision: 623 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=623&view=rev Author: nickols_k Date: 2012-12-28 17:27:59 +0000 (Fri, 28 Dec 2012) Log Message: ----------- fixed SIGPIPE during tcp.write Modified Paths: -------------- mplayerxp/libmpstream2/tcp.cpp Modified: mplayerxp/libmpstream2/tcp.cpp =================================================================== --- mplayerxp/libmpstream2/tcp.cpp 2012-12-28 17:03:09 UTC (rev 622) +++ mplayerxp/libmpstream2/tcp.cpp 2012-12-28 17:27:59 UTC (rev 623) @@ -99,6 +99,8 @@ case Tcp::IP6: our_s_addr = (any_t*) &server_address.six.sin6_addr; break; default: mpxp_err<<"[tcp"<<af2String(af)<<"] UnknownAF: "<<af<<std::endl; + ::closesocket(_fd); + _fd=-1; _error=Tcp::Err_Fatal; return; } @@ -125,6 +127,8 @@ #endif if( hp==NULL ) { mpxp_v<<"[tcp"<<af2String(af)<<"] Can't resolv: "<<_url.host()<<std::endl; + ::closesocket(_fd); + _fd=-1; _error=Tcp::Err_Fatal; return; } @@ -151,6 +155,8 @@ break; default: mpxp_err<<"[tcp"<<af2String(af)<<"] UnknownAF: "<<af<<std::endl; + ::closesocket(_fd); + _fd=-1; _error = Tcp::Err_Fatal; return; } @@ -216,6 +222,8 @@ ret = ::getsockopt(_fd,SOL_SOCKET,SO_ERROR,&_error,&err_len); if(ret < 0) { mpxp_err<<"[tcp"<<af2String(af)<<"] Get socket option failed: "<<strerror(errno)<<std::endl; + ::closesocket(_fd); + _fd=-1; _error=Tcp::Err_Fatal; return; } @@ -267,7 +275,7 @@ int Tcp::read(uint8_t* buf,unsigned len,int flags) { return ::recv(_fd,buf,len,flags); } int Tcp::write(const uint8_t* buf,unsigned len,int flags) const { return ::send(_fd,buf,len,flags); } -int Tcp::established() const { return _fd > 0; } +int Tcp::established() const { return _fd > 0 && _error==Tcp::Err_None; } Tcp::tcp_error_e Tcp::error() const { return _error; } libinput_t& Tcp::get_libinput() const { return libinput; } const URL& Tcp::url() const { return _url; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |