public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream)stream;

            while (bytes_index < file_length)
            {
                int len = -1;
                try {
                    len = sstream.socket.Send(bytes, bytes_index, file_length, SocketFlags.None);
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                    {
                        return;
                    }
                    sstream.Close();
                } catch (Exception e) {
                    sstream.Close();
                } finally {
                    if (len != -1)
                    {
                        bytes_index += len;
                    }
                }
            }

            IsComplete = (bytes_index == file_length);
        }
Exemple #2
0
        public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream)stream;

            while (bytes.Count > 0)
            {
                int len = -1;
                try {
                    len = sstream.socket.Send(bytes);
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                    {
                        return;
                    }
                    sstream.Close();
                } catch (Exception e) {
                    sstream.Close();
                } finally {
                    if (len != -1)
                    {
                        int num_segments = bytes.Count;
                        IOStream.AdjustSegments(len, bytes);
                        segments_written = num_segments - bytes.Count;
                    }
                }
            }

            FireCallbacks();
            IsComplete = (bytes.Count == 0);
        }
Exemple #3
0
        public void HandleWrite(IOStream stream)
        {
            SocketStream sstream = (SocketStream)stream;

            while (file_offset < file_length)
            {
                try {
                    Mono.Unix.Native.Syscall.sendfile(sstream.socket.Handle.ToInt32(),
                                                      file.Handle.ToInt32(), ref file_offset,
                                                      (ulong)(file_length - file_offset));
                } catch (SocketException se) {
                    if (se.SocketErrorCode == SocketError.WouldBlock || se.SocketErrorCode == SocketError.TryAgain)
                    {
                        return;
                    }
                    sstream.Close();
                } catch (Exception e) {
                    sstream.Close();
                }
            }

            if (file_offset >= file_length)
            {
                IsComplete = true;
            }
        }