Advertisement
Guest User

sendall.go

a guest
Apr 18th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.06 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "net"
  5.     "os"
  6.     "time"
  7. )
  8.  
  9. func main() {
  10.     var buf [0x100000]byte
  11.     var sent_so_far int
  12.  
  13.     if len(os.Args) < 2 {
  14.         println("Specify IP or hostname of the remote post")
  15.         return
  16.     }
  17.  
  18.     ip := os.Args[1] + ":11111"
  19.  
  20.     println("connecting to", ip, "...")
  21.  
  22.     con, e := net.DialTimeout("tcp4", ip, 10*time.Second)
  23.     if e != nil {
  24.         println(e.Error())
  25.         return
  26.     }
  27.     println("ok. now sending", len(buf), "bytes...")
  28.  
  29.     var to_cnt int
  30.     for sent_so_far < len(buf) {
  31.         bts2s := len(buf) - sent_so_far
  32.         if bts2s > 4096 {
  33.             bts2s = 4096
  34.         }
  35.         con.SetWriteDeadline(time.Now().Add(1 * time.Millisecond))
  36.         n, e := con.Write(buf[sent_so_far : sent_so_far+bts2s])
  37.         if e != nil {
  38.             if nerr, ok := e.(net.Error); ok && nerr.Timeout() {
  39.                 to_cnt++
  40.                 e = nil
  41.                 if n != 0 {
  42.                     println("n:", n)
  43.                 }
  44.             } else {
  45.                 println(e.Error())
  46.                 return
  47.             }
  48.         }
  49.         sent_so_far += n
  50.     }
  51.     println("closing socket...", to_cnt)
  52.     con.Close()
  53.     println(sent_so_far, "bytes sent. please check the file size at the other end")
  54.     time.Sleep(1e9)
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement