connection.go 1014 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package splithttp
  2. import (
  3. "io"
  4. "net"
  5. "time"
  6. )
  7. type splitConn struct {
  8. writer io.WriteCloser
  9. reader io.ReadCloser
  10. remoteAddr net.Addr
  11. localAddr net.Addr
  12. onClose func()
  13. }
  14. func (c *splitConn) Write(b []byte) (int, error) {
  15. return c.writer.Write(b)
  16. }
  17. func (c *splitConn) Read(b []byte) (int, error) {
  18. return c.reader.Read(b)
  19. }
  20. func (c *splitConn) Close() error {
  21. if c.onClose != nil {
  22. c.onClose()
  23. }
  24. err := c.writer.Close()
  25. err2 := c.reader.Close()
  26. if err != nil {
  27. return err
  28. }
  29. if err2 != nil {
  30. return err
  31. }
  32. return nil
  33. }
  34. func (c *splitConn) LocalAddr() net.Addr {
  35. return c.localAddr
  36. }
  37. func (c *splitConn) RemoteAddr() net.Addr {
  38. return c.remoteAddr
  39. }
  40. func (c *splitConn) SetDeadline(t time.Time) error {
  41. // TODO cannot do anything useful
  42. return nil
  43. }
  44. func (c *splitConn) SetReadDeadline(t time.Time) error {
  45. // TODO cannot do anything useful
  46. return nil
  47. }
  48. func (c *splitConn) SetWriteDeadline(t time.Time) error {
  49. // TODO cannot do anything useful
  50. return nil
  51. }