Add wxSocketBase::GetSocket().
Provide direct access to the underlying socket descriptor. Closes #8829. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73837 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -567,6 +567,7 @@ All:
|
||||
- Add wxDateTime::DiffAsDateSpan() and wxDateSpan::GetTotalMonths() (jonasr).
|
||||
- Add wxVector::assign() (Jonas Rydberg).
|
||||
- Add wx[F]File{Input,Output}Stream::GetFile() (troelsk).
|
||||
- Add wxSocketBase::GetSocket() (Laurent Poujoulat).
|
||||
- Add Nepali translation (Him Prasad Gautam).
|
||||
|
||||
All (GUI):
|
||||
|
@@ -79,10 +79,6 @@
|
||||
|
||||
// define some symbols which winsock.h defines but traditional BSD headers
|
||||
// don't
|
||||
#ifndef __WINDOWS__
|
||||
#define SOCKET int
|
||||
#endif
|
||||
|
||||
#ifndef INVALID_SOCKET
|
||||
#define INVALID_SOCKET (-1)
|
||||
#endif
|
||||
@@ -293,7 +289,7 @@ public:
|
||||
// TODO: make these fields protected and provide accessors for those of
|
||||
// them that wxSocketBase really needs
|
||||
//protected:
|
||||
SOCKET m_fd;
|
||||
wxSOCKET_T m_fd;
|
||||
|
||||
int m_initialRecvBufferSize;
|
||||
int m_initialSendBufferSize;
|
||||
|
@@ -30,6 +30,16 @@ class wxSocketImpl;
|
||||
// Types and constants
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
// Define the type of native sockets.
|
||||
#if defined(__WINDOWS__)
|
||||
// Although socket descriptors are still 32 bit values, even under Win64,
|
||||
// the socket type is 64 bit there.
|
||||
typedef wxUIntPtr wxSOCKET_T;
|
||||
#else
|
||||
typedef int wxSOCKET_T;
|
||||
#endif
|
||||
|
||||
|
||||
// Types of different socket notifications or events.
|
||||
//
|
||||
// NB: the values here should be consecutive and start with 0 as they are
|
||||
@@ -187,6 +197,9 @@ public:
|
||||
void SetNotify(wxSocketEventFlags flags);
|
||||
void Notify(bool notify);
|
||||
|
||||
// Get the underlying socket descriptor.
|
||||
wxSOCKET_T GetSocket() const;
|
||||
|
||||
// initialize/shutdown the sockets (done automatically so there is no need
|
||||
// to call these functions usually)
|
||||
//
|
||||
|
@@ -7,6 +7,16 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/**
|
||||
The type of the native socket.
|
||||
|
||||
Notice that the definition below is simplified and this type is not always
|
||||
int, e.g. it is a 64 bit integer type under Win64.
|
||||
|
||||
@since 2.9.5
|
||||
*/
|
||||
typedef int wxSOCKET_T;
|
||||
|
||||
/**
|
||||
@class wxIPaddress
|
||||
|
||||
@@ -1387,6 +1397,25 @@ public:
|
||||
*/
|
||||
void SetNotify(wxSocketEventFlags flags);
|
||||
|
||||
/**
|
||||
Returns the native socket descriptor.
|
||||
|
||||
This is intended to use with rarely used specific platform features
|
||||
that can only be accessed via the actual socket descriptor.
|
||||
|
||||
Do not use this for reading or writing data from or to the socket as
|
||||
this would almost surely interfere with wxSocket code logic and result
|
||||
in unexpected behaviour.
|
||||
|
||||
The socket must be successfully initialized, e.g. connected for client
|
||||
sockets, before this method can be called.
|
||||
|
||||
@return Returns the native socket descriptor.
|
||||
|
||||
@since 2.9.5
|
||||
*/
|
||||
wxSOCKET_T GetSocket() const;
|
||||
|
||||
//@}
|
||||
};
|
||||
|
||||
|
@@ -526,7 +526,7 @@ wxSocketImpl *wxSocketImpl::Accept(wxSocketBase& wxsocket)
|
||||
{
|
||||
wxSockAddressStorage from;
|
||||
WX_SOCKLEN_T fromlen = sizeof(from);
|
||||
const SOCKET fd = accept(m_fd, &from.addr, &fromlen);
|
||||
const wxSOCKET_T fd = accept(m_fd, &from.addr, &fromlen);
|
||||
|
||||
// accepting is similar to reading in the sense that it resets "ready for
|
||||
// read" flag on the socket
|
||||
@@ -1826,9 +1826,9 @@ wxSocketServer::wxSocketServer(const wxSockAddress& addr,
|
||||
return;
|
||||
}
|
||||
|
||||
// Notice that we need a cast as SOCKET is 64 bit under Win64 and that the
|
||||
// cast is safe because a SOCKET is a handle and so limited to 32 (or,
|
||||
// actually, even 24) bit values anyhow.
|
||||
// Notice that we need a cast as wxSOCKET_T is 64 bit under Win64 and that
|
||||
// the cast is safe because a wxSOCKET_T is a handle and so limited to 32
|
||||
// (or, actually, even 24) bit values anyhow.
|
||||
wxLogTrace( wxTRACE_Socket, wxT("wxSocketServer on fd %u"),
|
||||
static_cast<unsigned>(m_impl->m_fd) );
|
||||
}
|
||||
@@ -1894,6 +1894,14 @@ bool wxSocketServer::WaitForAccept(long seconds, long milliseconds)
|
||||
return DoWait(seconds, milliseconds, wxSOCKET_CONNECTION_FLAG) == 1;
|
||||
}
|
||||
|
||||
wxSOCKET_T wxSocketBase::GetSocket() const
|
||||
{
|
||||
wxASSERT_MSG( m_impl, wxS("Socket not initialised") );
|
||||
|
||||
return m_impl->m_fd;
|
||||
}
|
||||
|
||||
|
||||
bool wxSocketBase::GetOption(int level, int optname, void *optval, int *optlen)
|
||||
{
|
||||
wxASSERT_MSG( m_impl, wxT("Socket not initialised") );
|
||||
|
Reference in New Issue
Block a user