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 wxDateTime::DiffAsDateSpan() and wxDateSpan::GetTotalMonths() (jonasr).
|
||||||
- Add wxVector::assign() (Jonas Rydberg).
|
- Add wxVector::assign() (Jonas Rydberg).
|
||||||
- Add wx[F]File{Input,Output}Stream::GetFile() (troelsk).
|
- Add wx[F]File{Input,Output}Stream::GetFile() (troelsk).
|
||||||
|
- Add wxSocketBase::GetSocket() (Laurent Poujoulat).
|
||||||
- Add Nepali translation (Him Prasad Gautam).
|
- Add Nepali translation (Him Prasad Gautam).
|
||||||
|
|
||||||
All (GUI):
|
All (GUI):
|
||||||
|
@@ -79,10 +79,6 @@
|
|||||||
|
|
||||||
// define some symbols which winsock.h defines but traditional BSD headers
|
// define some symbols which winsock.h defines but traditional BSD headers
|
||||||
// don't
|
// don't
|
||||||
#ifndef __WINDOWS__
|
|
||||||
#define SOCKET int
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef INVALID_SOCKET
|
#ifndef INVALID_SOCKET
|
||||||
#define INVALID_SOCKET (-1)
|
#define INVALID_SOCKET (-1)
|
||||||
#endif
|
#endif
|
||||||
@@ -293,7 +289,7 @@ public:
|
|||||||
// TODO: make these fields protected and provide accessors for those of
|
// TODO: make these fields protected and provide accessors for those of
|
||||||
// them that wxSocketBase really needs
|
// them that wxSocketBase really needs
|
||||||
//protected:
|
//protected:
|
||||||
SOCKET m_fd;
|
wxSOCKET_T m_fd;
|
||||||
|
|
||||||
int m_initialRecvBufferSize;
|
int m_initialRecvBufferSize;
|
||||||
int m_initialSendBufferSize;
|
int m_initialSendBufferSize;
|
||||||
|
@@ -30,6 +30,16 @@ class wxSocketImpl;
|
|||||||
// Types and constants
|
// 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.
|
// Types of different socket notifications or events.
|
||||||
//
|
//
|
||||||
// NB: the values here should be consecutive and start with 0 as they are
|
// NB: the values here should be consecutive and start with 0 as they are
|
||||||
@@ -187,6 +197,9 @@ public:
|
|||||||
void SetNotify(wxSocketEventFlags flags);
|
void SetNotify(wxSocketEventFlags flags);
|
||||||
void Notify(bool notify);
|
void Notify(bool notify);
|
||||||
|
|
||||||
|
// Get the underlying socket descriptor.
|
||||||
|
wxSOCKET_T GetSocket() const;
|
||||||
|
|
||||||
// initialize/shutdown the sockets (done automatically so there is no need
|
// initialize/shutdown the sockets (done automatically so there is no need
|
||||||
// to call these functions usually)
|
// 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
|
@class wxIPaddress
|
||||||
|
|
||||||
@@ -1387,6 +1397,25 @@ public:
|
|||||||
*/
|
*/
|
||||||
void SetNotify(wxSocketEventFlags flags);
|
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;
|
wxSockAddressStorage from;
|
||||||
WX_SOCKLEN_T fromlen = sizeof(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
|
// accepting is similar to reading in the sense that it resets "ready for
|
||||||
// read" flag on the socket
|
// read" flag on the socket
|
||||||
@@ -1826,9 +1826,9 @@ wxSocketServer::wxSocketServer(const wxSockAddress& addr,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notice that we need a cast as SOCKET is 64 bit under Win64 and that the
|
// Notice that we need a cast as wxSOCKET_T is 64 bit under Win64 and that
|
||||||
// cast is safe because a SOCKET is a handle and so limited to 32 (or,
|
// the cast is safe because a wxSOCKET_T is a handle and so limited to 32
|
||||||
// actually, even 24) bit values anyhow.
|
// (or, actually, even 24) bit values anyhow.
|
||||||
wxLogTrace( wxTRACE_Socket, wxT("wxSocketServer on fd %u"),
|
wxLogTrace( wxTRACE_Socket, wxT("wxSocketServer on fd %u"),
|
||||||
static_cast<unsigned>(m_impl->m_fd) );
|
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;
|
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)
|
bool wxSocketBase::GetOption(int level, int optname, void *optval, int *optlen)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( m_impl, wxT("Socket not initialised") );
|
wxASSERT_MSG( m_impl, wxT("Socket not initialised") );
|
||||||
|
Reference in New Issue
Block a user