const wxString& data,
const wxMBConv& conv)
{
+#if wxUSE_UNICODE
wxScopedCharBuffer scb = data.mb_str(conv);
- if ( !scb.length() )
+ const size_t len = scb.length();
+ const char* const buf = scb.data();
+#else // !wxUSE_UNICODE
+ const size_t len = data.length();
+ const char* const buf = data.mb_str(conv);
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+
+ if ( !len )
return false;
m_postBuffer.Clear();
- m_postBuffer.AppendData(scb.data(), scb.length());
+ m_postBuffer.AppendData(buf, len);
m_contentType = contentType;
return true;
SaveState();
// we may use non blocking sockets only if we can dispatch events from them
- SetFlags( wxIsMainThread() && wxApp::IsMainLoopRunning() ? wxSOCKET_NONE
- : wxSOCKET_BLOCK );
+ int flags = wxIsMainThread() && wxApp::IsMainLoopRunning() ? wxSOCKET_NONE
+ : wxSOCKET_BLOCK;
+ // and we must use wxSOCKET_WAITALL to ensure that all data is sent
+ flags |= wxSOCKET_WAITALL;
+ SetFlags(flags);
Notify(false);
wxString buf;