Commit Graph

226 Commits

Author SHA1 Message Date
Vadim Zeitlin
1b4b608091 Do wait for connection in the server socket.
The code returned immediately from wxSocketBase::DoWait() if it wasn't
connected but it only made sense for the client sockets, not server ones which
could be calling this function precisely in order to wait until a connection
is made.

Also added a test for this bug in the sockets/server sample.

Closes #11107.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61726 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-08-21 15:25:09 +00:00
Vadim Zeitlin
3270038fb4 Force linking of src/osx/core/sockosx.cpp.
Without this the file was omitted by linker entirely in the static build and
the correct socket manager wasn't used for the GUI applications (see #11030).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61689 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-08-17 23:02:56 +00:00
Vadim Zeitlin
4f260c9c68 Virtualize wxSocketImpl creation by routing it via wxSocketManager.
This is necessary to create different kinds of sockets for the console and GUI
applications under OS X: unlike Unix which use different socket managers for
the console and GUI programs but still use the same data structures in both
cases as X11 and derived toolkits APIs are very similar, Core Foundation
sockets don't have anything in common with their console counterparts and so
we need to use different wxSocketImpl versions too.

A side effect of this commit is that now we need to force linking of
src/msw/sockmsw.cpp when using sockets: this wasn't necessary before because
it contained wxSocketImpl method definition but now that there are no more
direct dependencies on it, MSVC linker simply discards the object file unless
we force it to link with it.

Notice that this commit doesn't change anything yet, it simply refactors the
code to use wxSocketManager::CreateSocket() instead of wxSocketImpl::Create()
in preparation for the next change.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61675 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-08-16 23:13:45 +00:00
Vadim Zeitlin
9a83f86094 Globally replace _T() with wxT().
Standardize on using a single macro across all wxWidgets sources and solve the name clash with Sun CC standard headers (see #10660).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-23 20:30:22 +00:00
Vadim Zeitlin
3185abc278 Support delayed destruction in console applications too.\n\nThis only works if there is a running event loop but if there is one, we can have the same kind of problems with non-GUI objects such as sockets in console applications as we have with windows in GUI ones, so we must support this (see #10989).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61488 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-21 14:16:44 +00:00
Vadim Zeitlin
af58844636 Add information about the log message generation location to wxLog.
This means that wxLog::DoLogRecord() can now retrieve the file name, line
number and the function where the message was logged.

An unfortunate consequence of this change is that now

	if ( condition )
		wxLogError("Whatever");

results in a warning from g++ 4.x with -Wparentehses, so extra parentheses had
to be added in many places.

Finally, also allow storing arbitrary attributes in wxLogRecordInfo. This had
to be added to implement our own overloaded wxLogStatus() and wxLogSysError()
and will probably be useful for the others as well.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61363 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-09 20:26:34 +00:00
Vadim Zeitlin
9038fc94a7 we need to reset m_connected flag as well as setting m_closed when the connection is lost
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61312 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-03 14:29:56 +00:00
Vadim Zeitlin
f46a01651a don't call wxSocketImpl::ReenableEvents() if the socket was closed while reading/writing to avoid an assert in it
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61311 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-03 14:28:02 +00:00
Vadim Zeitlin
609aa390f4 reset m_establishing flag and last error when asynchronous connection is established (closes #10838)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61295 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-02 22:38:42 +00:00
Vadim Zeitlin
40a983ad63 set socket state to connected when it receives a connection notification, otherwise WaitOnConnect() had to be called for asynchrnously Connect()ed sockets to work (closes #10952)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61287 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-02 16:10:12 +00:00
Vadim Zeitlin
d34f724d42 don't check for connected state of UDP sockets which are never connected (closes #10717)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60576 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-05-09 17:26:35 +00:00
Vadim Zeitlin
7172db1857 initialize the local address before calling getsockname() on it (closes #10779)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-05-09 13:07:21 +00:00
Paul Cornett
a645ea885d fix for missing sighandler_t
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59072 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-02-21 17:13:56 +00:00
Vadim Zeitlin
335a0bc339 fix Windows compilation after last change
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59038 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-02-19 21:30:05 +00:00
Vadim Zeitlin
04b2ab1a0c compilation fix for systems without neither MSG_NOSIGNAL nor SO_NOSIGPIPE (such as AIX and old HP-UX): disable SIGPIPE manually in this case
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-02-19 14:17:21 +00:00
Vadim Zeitlin
c0c133e13b add wx-prefixed and semicolon-requiring versions of DECLARE_NO_{COPY,ASSIGN}_CLASS macros
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58757 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-02-08 11:45:59 +00:00
Vadim Zeitlin
5ab2f2575d make sure events are enabled in DoWait() before starting to wait for them (closes #10396)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58250 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-20 23:53:35 +00:00
Francesco Montorsi
4f61df823f fix wxMSW shared builds
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-13 00:38:38 +00:00
Francesco Montorsi
54e757fc96 ensure correct linking of the socket manager initializer for static builds of wxWidgets
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-12 23:14:17 +00:00
Vadim Zeitlin
3c77890141 add more flexible and safer template Connect() overloads (#10000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-12 14:26:13 +00:00
Jouk Jansen
66034aba2e Fixing/Testing sockets on OpenVMS
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-12 09:06:36 +00:00
Vadim Zeitlin
0ed00ab5be restore code preventing the events being generated from inside our own DoRead/Write() mistakenly removed in r57796
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57807 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-03 02:20:25 +00:00
Vadim Zeitlin
ebbf740764 streamline handling of wxSOCKET_LOST in DoWait()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-02 22:07:45 +00:00
Vadim Zeitlin
f26d81383f no changes, just reformat/indent consistently
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57797 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-02 21:58:09 +00:00
Vadim Zeitlin
df21920b80 disable the events when we get a notification about socket being ready for IO and reenable them later after performing the IO in the Unix version to avoid continuous flood of ready notifications
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57796 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-02 21:53:30 +00:00
Vadim Zeitlin
365b8793d3 use guard classes automatically restoring the old state in their dtor instead of manually changing wxSocketBase::m_reading/writing/flags
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57778 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-02 17:34:16 +00:00
Vadim Zeitlin
6f405b31b2 fix WaitForXXX() to work as before: if the socket is already ready for reading/writing they should return immediately
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57725 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-02 01:00:40 +00:00
Vadim Zeitlin
f17632706e handle loss of connection explicitly in Read/Write() to fix socket IO under Unix after the last change
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57670 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-30 15:07:04 +00:00
Vadim Zeitlin
f539560019 try reading/writing to/from the socket before blocking on it, this seems more efficient and is required to avoid blocking indefinitely under Windows
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57668 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-30 14:50:23 +00:00
Vadim Zeitlin
9588640d19 fix handling of errors due to the other end of the socket being closed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57661 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-30 12:52:38 +00:00
Vadim Zeitlin
b67397a779 added wxSocket::ShutdownOutput() (closes #9229)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57656 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-30 11:27:41 +00:00
Vadim Zeitlin
c9bccf239c replaced unweildy GAddress functions with wxSockAddressImpl class, similarly to GSocket -> wxSocketImpl transition; share more code between IPv4 and IPv6 branches
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57635 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-29 14:35:48 +00:00
Vadim Zeitlin
14372de82e move Read/Write() to common code, there was almost nothing platform-specific in it
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 22:49:46 +00:00
Vadim Zeitlin
5e9238f9c6 remove the badle defined and apparently unnecessary wxSocketImpl::m_detected field
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57608 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 21:48:42 +00:00
Vadim Zeitlin
64b1cea09a got rid of wxSocketBase::m_error which could get out of sync with wxSocketImpl::m_error -- one error indicator is enough
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 17:56:03 +00:00
Vadim Zeitlin
2b036c4b23 our sockets are always non-blocking anyhow so throw away all the code dealing with checking if they're blocking; also merge Unix/Win32 versions of connect() and accept() handling as they were almost identical except for the different checking of the return value which was factored out into a platform-specific GetLastError() function
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57600 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 17:15:22 +00:00
Vadim Zeitlin
437a8892a1 set m_closed to true when we get connection lost notification
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 11:39:46 +00:00
Vadim Zeitlin
735ac2bc94 also initialize option value length before calling getsockopt()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57577 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 00:21:28 +00:00
Vadim Zeitlin
f16ba4bb7e initialize name length before calling getsockname()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57576 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-27 00:19:37 +00:00
Vadim Zeitlin
00414faf34 use DispatchTimeout() and/or select() with timeout instead of polling loop in wxSocket::DoWait()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57572 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-26 22:50:50 +00:00
Vadim Zeitlin
22185a1f15 remove m_use_events from Unix wxSocket implementation, we always need asynchronous socket notifications now (and this was always the case under Windows anyhow), even if we don't always generate wx events corresponding to them
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-26 20:20:46 +00:00
Vadim Zeitlin
2f1c8faf2c we don't need to use select() in DoWait() if we're receiving notifications about changes on our socket anyhow, this makes the code less efficient and, most importantly, much more confusing than necessary
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57566 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-26 14:39:04 +00:00
Vadim Zeitlin
5c1193e090 remember the events we were notified about in OnRequest() (not used yet but necessary for upcoming changes)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-26 14:33:52 +00:00
Vadim Zeitlin
5b90e570c9 use INVALID_SOCKET instead of -1 to avoid signed/unsigned comparison warning
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57559 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-25 20:28:14 +00:00
Vadim Zeitlin
c6b1063250 refactor Input/Output_Timeout: don't duplicate the same code in MSW/Unix code and also don't duplicate it for input and output, one function is enough for both
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57558 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-12-25 20:27:35 +00:00
Vadim Zeitlin
54cb21d692 remove wxSocketManager::CreateSocket() function, we don't need to have different wxSocketImpl implementation for the same platform, all the differences between console and GUI applications are abstracted by wxSocketManager::Install/Uninstall_Callback() methods
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57000 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-28 15:06:50 +00:00
Vadim Zeitlin
6091364135 rename various gsock* files to sock* (except for MSW where this will be done later)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56995 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-28 13:04:47 +00:00
Vadim Zeitlin
51fe4b60ab Streamline wxSocket code: wxSocketBase now uses wxSocketImpl (previously known
as GSocket) which is a base class with various wxSocketImplXXX implementations
provided by different wxSocketManagers.

Share more code between ports (still not finished).

Refactor some code inside wxSocketImpl itself to be less redundant and fixed a
couple of minor bugs in the process.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56994 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-28 12:47:07 +00:00
Vadim Zeitlin
f0fbbe2364 trying to resolve GSocketManager API mess: the meaning of Install/Uninstall_Callback() and Enable/Disable_Events() has diverged in different ports and didn't make any sense any more; merge them in a single function (with still differing semantics though); also added Close_Socket()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-25 13:33:07 +00:00
Vadim Zeitlin
87c0312a66 use struct timeval and not a long to store socket timeout under Unix too
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-23 13:39:12 +00:00